问题描述:ViewPager使用FramgentPagerAdapter之后,notifyDataSetChanged无效。
原因分析: FramgentPagerAdapter会缓存Framgent到FragementManager中。 当进行notifyDataSetChanged来更新UI时,FramgentPagerAdapter会优先从FragementManager中查找是否有缓存的Fragment,如果有缓存,则直接使用,不会再调用Adapter的getItem()方法去获取一个新的Fragment实例,我们期望notifyDataSetChanged后的更新UI的需求也就无法实现。
解决方案: 第一种方案:在notifyDataSetChanged之前,先从FragmentManager中将原先被缓存的Fragment清除。
// 移除fragmentManager中之前返回过的Framgent FragmentManager supportFragmentManager = getSupportFragmentManager(); FragmentTransaction transaction = supportFragmentManager.beginTransaction(); for (Fragment fragment : mFragments) { transaction.remove(fragment); } transaction.commit(); transaction = null; // 清空数据集 mFragments.clear(); // 添加新的数据集 。。。。。 // 更新UI mAdapter.notifyDataSetChanged();第二种方案:除了清除FragmentManager中的Fragment缓存这种方案外,我们还可以直接改用FragmentStatePagerAdapter来解决这个Bug。