FragmentPagerAdapter刷新Fragment终极解决方案

在fragmentpageadapter的instantiateItem方法里,他会先去FragmentManager里面去查找有没有相关的fragment如果有就直接使用如果没有才会触fragmentpageadapter的getItem方法获取一个fragment。所以你更新fragments集合是没有作用的。

    这个方案还是在instantiateItem方法里作文章,代码如下:

@Override

public Object instantiateItem(ViewGroup Container,int position) {

    //得到缓存的fragment

    Fragment fragment = (Fragment)super.instantiateItem(container,

           position);

     //得到tag

    String fragmentTag = fragment.getTag();         

    //如果这个fragment需要更新

     FragmentTransaction ft =fm.beginTransaction();

      //移除旧的fragment

       ft.remove(fragment);

      //换成新的fragment

       fragment =fragments[position %fragments.length];

      //添加新fragment时必须用前面获得的tag 

       ft.add(container.getId(), fragment, fragmentTag);

       ft.attach(fragment);

       ft.commit();

      }

 return fragment;

}


代码注释得很清楚了,主要思路就是用新的fragment替换FragmentManager里缓存的旧的fragment,重点解释 (得到tag )的地方 

FragmentPagerAdapter里的instantiateItem有两条代码:

        String name = makeFragmentName(container.getId(), position);

        Fragment fragment = mFragmentManager.findFragmentByTag(name);

   说明fragmentpageadapter内部是用tag识别fragment的,并且有它自己的一套算法用于生成tag,所以我们这里必须用它生成的tag来添加新的fragment,否则fragmentpageadapter就无法识别这个新的fragment。

FragmentPagerAdapter还必须重写:

@Override

public int getItemPosition(Object object) {

return POSITION_NONE;

}

而让ViewPager重绘所有item。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值