fragment 的为刷新主要是因为之前的fragment的未被替换
首先viewpager的adapter如下:
public class MinePagerAdapterextends FragmentPagerAdapter {
private ListmFragments;
private ListmTabTitle;
private FragmentManagerfm;
public MinePagerAdapter(FragmentManager fm, List mFragments, List mTabTitle) {
super(fm);
this.fm = fm;
this.mFragments = mFragments;
this.mTabTitle = mTabTitle;
}
@Override
public Fragment getItem(int position) {
return mFragments.get(position);
}
@Override
public int getCount() {
return mFragments.size();
}
public Object instantiateItem(ViewGroup container,int position) {
for (int i =0; i
removeFragment(container, position);
}
return super.instantiateItem(container, position);
}
private void removeFragment(ViewGroup container,int index) {
String tag = getFragmentTag(container.getId(), index);
Fragment fragment =fm.findFragmentByTag(tag);
if (fragment ==null)
return;
FragmentTransaction ft =fm.beginTransaction();
ft.remove(fragment);
ft.commit();
ft =null;
fm.executePendingTransactions();
}
private String getFragmentTag(int viewId,int index) {
try {
Class cls = FragmentPagerAdapter.class;
Class[] parameterTypes = {int.class,long.class};
Method method = cls.getDeclaredMethod("makeFragmentName", parameterTypes);
method.setAccessible(true);
String tag = (String) method.invoke(this, viewId, index);
return tag;
}catch (Exception e) {
e.printStackTrace();
return "";
}
}
@Override
public void destroyItem(ViewGroup container,int position, Object object) {
super.destroyItem(container, position, object);
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
@Override
public void setPrimaryItem(ViewGroup container,int position, Object object) {
super.setPrimaryItem(container, position, object);
}
@Override
public CharSequence getPageTitle(int position) {
return mTabTitle.get(position);
}
}
在Activity种的使用:
private MinePagerAdapter fragmenadapter;
private ArrayListmFragment = new ArrayList<>();
private ArrayListmTitle = new ArrayList<>();
fragmenadapter =new MinePagerAdapter(getFragmentManager(),mFragment,mTitle);
viewpager.setAdapter(fragmenadapter);//给ViewPager设置适配器
mTabLayout.setupWithViewPager(viewpager);//将TabLayout与Viewpager联动起来
mTabLayout.setTabMode(TabLayout.MODE_FIXED);
viewpager.setCurrentItem(0);
刷新时,清除mTitle、mFragment, 然后重新赋值并且重新给viewpager设置adapter:
mTitle.clear();
mFragment.clear();
fragmenadapter = null;
//1、 重新赋值
mTitle.add(beans.getName());
mFragment.add(HomeOtherFragment.newInstance(beans));
// 2、重新setAdapter
fragmenadapter =new MinePagerAdapter(getFragmentManager(),mFragment,mTitle);
viewpager.setAdapter(fragmenadapter);//给ViewPager设置适配器
mTabLayout.setupWithViewPager(viewpager);//将TabLayout与Viewpager联动起来
mTabLayout.setTabMode(TabLayout.MODE_FIXED);
viewpager.setCurrentItem(0);