ViewPager刷新遇到的坑

匿名 (未验证) 提交于 2019-12-03 00:39:02

今天写了个ViewPager+Fragment,切换,刷新Fragment数据的demo,写的吐血

1.

for (int i = 0; i < mCategoryEntityList.size(); i++) {     DefualInfoFragment meFragment = new DefualInfoFragment();     Bundle bundle = new Bundle();     bundle.putString(Constant.CHANNEL_CODE, mCategoryEntityList.get(i).toString());     meFragment.setArguments(bundle);     fragments.add(meFragment); } adapter = new NewsPagerAdapter(getChildFragmentManager(), fragments); mViewPager.setAdapter(adapter);

循环四个Fragment加到list中,到这里都没问题


这时候,我准备点击加号,改变Fragment的顺序


然后调用

notifyDataSetChanged()

我去,竟然没有用

百度发现,出现这种原因,是因为ViewPager具有缓存作用,他默认会缓存三个Fragment,当前,左边,右边

而且在adapter生成Fragment时,会给Fragment加上name


这样的作用就是,当你再点击这个Fragment时,它会去寻找它的name是否存在,如果没有就生成,存在就不会刷新

所以我改变的Fragment中List的顺序,并不能起到刷新的作用

知道原因,就可以很好的找到方法了

解决:

1.在adapter中修改

这样每次都会刷新

2.在显示界面中

if (mViewPager.getAdapter() != null) {     FragmentManager fm = getChildFragmentManager();     FragmentTransaction ft = fm.beginTransaction();     List<Fragment> fragments = fm.getFragments();     if (fragments != null && fragments.size() > 0) {         for (int i = 0; i < fragments.size(); i++) {             ft.remove(fragments.get(i));         }     }     ft.commit(); }  fragments.clear(); for (int i = 0; i < mCategoryEntityList.size(); i++) {     DefualInfoFragment meFragment = new DefualInfoFragment();     Bundle bundle = new Bundle();     bundle.putString(Constant.CHANNEL_CODE, mCategoryEntityList.get(i).toString());     meFragment.setArguments(bundle);     fragments.add(meFragment); }

把缓存的Fragment去掉

注意:当布局是Fragment套Fragment时,用getChildFragmentManager,不能使用getSupportFragmentManager或getFragmentManager,这两个可以在Activity中使用

我遇到最坑爹的是,它竟然与MagicIndicator冲突,调用刷新,会导致页面空白

最终没有办法,我只能adapter

adapter = new NewsPagerAdapter(getChildFragmentManager(), fragments); mViewPager.setAdapter(adapter); commonNavigator.notifyDataSetChanged(); adapter.notifyDataSetChanged();

最后问题解决


当然,一般只需上面两段代码在用

adapter.notifyDataSetChanged();


就可以起到刷新作用了

我这个情况比较特殊,具体原因,也没有调查出来,有谁知道可以和我说一下,谢谢

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!