FragmentPagerAdapter 和 FragmentStatePagerAdapter 区别

   上周加今天都在调整一个问题:viewpager重新加载数据源,无法刷新,注意:这里说的并不是重新刷新viewpager中某个fragment 的数据,而是改变viewpager 的整体结构

    最终在一位大神的指导下,终于找到问题。之前用的是FragmentPagerAdapter ,无论怎样notifyDataSetChanged 或者new 对象都无法解决,后来viewpager 的adapter 换了,换成了FragmentStatePagerAdapter,这样,再次notifyDataSetChanged就真的刷新成功了。这个具体的原因网上有说明,说的都比较深奥,我比较菜,看了半天也没看懂,像我们这种菜逼,只能先记住,看源码,有时间慢慢琢磨,慢慢来吧。。。

    



public class AdapterViewStatePager extends FragmentStatePagerAdapter {
   private int mChildCount = 0;
   private String[] title ;

   public void setTitle(String[] title) {
      this.title = title;
   }

   private ArrayList<FragmentBase> fragmentBases = new ArrayList<FragmentBase>();;

   public void setFragmentBases(ArrayList<FragmentBase> fragmentBases) {
      this.fragmentBases = fragmentBases;
   }

   @Override
   public void notifyDataSetChanged() {
      mChildCount = getCount();
      super.notifyDataSetChanged();
   }

   @Override

   public int getItemPosition(Object object)   {
      if ( mChildCount > 0) {
         mChildCount --;
         return POSITION_NONE;
      }
      return super.getItemPosition(object);

   }

   public AdapterViewStatePager(FragmentManager fragmentManager) {
      super(fragmentManager);
   }

   public AdapterViewStatePager(FragmentManager fragmentManager,
                         ArrayList<FragmentBase> fragmentBases) {
      super(fragmentManager);
      this.fragmentBases = fragmentBases;
   }

   @Override
   public CharSequence getPageTitle(int position) {
      return title[position % title.length];
   }

   @Override
   public Fragment getItem(int position) {
      return fragmentBases.get(position);
   }

   @Override
   public int getCount() {
      return fragmentBases.size();
   }

   @Override
   public void destroyItem(ViewGroup container, int position, Object object) {
       super.destroyItem(container, position, object);
   }

   @Override
   public void setPrimaryItem(ViewGroup container, int position, Object object) {
      super.setPrimaryItem(container, position, object);
   }
}




调用:

adapterViewPager.setFragmentBases(fragmentBases);
viewPager.setAdapter(adapterViewPager);
viewPager.invalidate();
adapterViewPager.notifyDataSetChanged();
tabPageIndicator.setViewPager(viewPager);
tabPageIndicator.notifyDataSetChanged();
tabPageIndicator.setCurrentItem(0);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值