团队协同网站开发,网站开发类毕业设计,找外包做网站要多久,企业网站建设怎么样在fragmentpageadapter的instantiateItem方法里#xff0c;他会先去FragmentManager里面去查找有没有相关的fragment如果有就直接使用如果没有才会触发fragmentpageadapter的getItem方法获取一个fragment。所以你更新fragments集合是没有作用的。
所以要用新的方法实现刷新功…在fragmentpageadapter的instantiateItem方法里他会先去FragmentManager里面去查找有没有相关的fragment如果有就直接使用如果没有才会触发fragmentpageadapter的getItem方法获取一个fragment。所以你更新fragments集合是没有作用的。
所以要用新的方法实现刷新功能
主要思路
就是用新的fragment替换FragmentManager里缓存的旧的fragment
在系统的代码中 String name makeFragmentName(container.getId(), position);Fragment fragment mFragmentManager.findFragmentByTag(name);
说明fragmentpageadapter内部是用tag识别fragment的并且有它自己的一套算法用于生成tag所以创建是它已经有了自己的tag,不用我们赋值。
所以我们这里必须用它生成的tag来添加新的fragment,否则fragmentpageadapter就无法识别这个新的fragment。
实例
更换fragment
ListFragment fragments new ArrayList();fragments.add(new PoliceFragment());fragments.add(new GirlFragment());fragments.add(new ThirdFragment());boolean[] fragmentsUpdateFlag { false, false, true};TabsPagerAdapter adapter new TabsPagerAdapter(getSupportFragmentManager(), fragments,fragmentsUpdateFlag);mVP.setAdapter(adapter);mVP.getAdapter().notifyDataSetChanged();mTab.setupWithViewPager(mVP);
自定义Adapter的实现
package com.zj.adapter;import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentTransaction;
import android.view.ViewGroup;import java.util.List;/*** Created by CoXier on 2016/5/2.*/public class TabsPagerAdapter extends FragmentPagerAdapter {ListFragment mFragments;FragmentManager fm;private int curUpdatePager;String[] titles {警察风采,在逃嫌犯,新闻资讯};boolean[] fragmentsUpdateFlag;public TabsPagerAdapter(FragmentManager fm, ListFragment mFragments,boolean[] fragmentsUpdateFlag) {super(fm);this.fmfm;this.mFragments mFragments;this.fragmentsUpdateFlagfragmentsUpdateFlag;}Overridepublic Fragment getItem(int position) {return mFragments.get(position);}Overridepublic Object instantiateItem(ViewGroup container, int position) {//得到缓存的fragmentFragment fragment (Fragment) super.instantiateItem(container,position);//得到tag这点很重要String fragmentTag fragment.getTag();if (fragmentsUpdateFlag[position % fragmentsUpdateFlag.length]) {//如果这个fragment需要更新FragmentTransaction ft fm.beginTransaction();//移除旧的fragmentft.remove(fragment);//换成新的fragmentfragment mFragments.get(position % mFragments.size());//添加新fragment时必须用前面获得的tag这点很重要ft.add(container.getId(), fragment, fragmentTag);ft.attach(fragment);ft.commit();//复位更新标志fragmentsUpdateFlag[position % fragmentsUpdateFlag.length] false;}return fragment;}Overridepublic int getCount() {return mFragments.size();}Overridepublic CharSequence getPageTitle(int position) {return titles[position];}
}
参考链接
FragmentPagerAdapter刷新fragment最完美解决方案 - z13759561330的专栏 - 博客频道 - CSDN.NET