Android开发相关问题

xiaoxiao2021-03-01  12

FramgentPagerAdapter使用notifyDataSetChanged无效

问题描述: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。

转载请注明原文地址: https://www.6miu.com/read-3350313.html

最新回复(0)