android中viewPager搭配Fragment重新加载后,还是显示之前数据,如何清viewPager的缓存呢刷新viewPager?

本文介绍了在Android中使用ViewPager配合Fragment时,遇到数据无法重新加载的问题及解决方案。通过清除FragmentManager中的数据,确保在更新adapter后正确刷新Fragment内容。文中提供了三种方法,重点推荐了首先清除FragmentManager中的数据并更新adapter的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

android中viewPager搭配Fragment重新加载后,还是显示之前数据

开始我尝试清掉fragmentList,fragmentList.clear();

但是重新再加载viewPager时,发现还是会使用已经创建的fragment

解决方案

一、更新adapter数据前先清除FragmentManager中的数据

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
if (fragmentList.size() > 0) {
    for (Fragment fragment : fragmentList) {
        ft.remove(fragment);
    }
    ft.commitNow();
    fragmentList.clear();
    adapter.notifyDataSetChanged();
}

注意:要刷新adapter

二、~~FragmentAdapter中重写getItemPosition方法,测试中发现没用,原因得问问大佬们~~

自定义FragmentPagerAdapter中重写该方法

@Override
public int getItemPosition(@NonNull Object object) {
    return PagerAdapter.POSITION_NONE;
}

三、~~FragmentAdapter中清除fragment缓存,测试中发现也没有用~~

public void clearAll() {
    //先保证ViewPager之前已设置过Adapter,这样才有可能存在缓存
    //获取FragmentManager实现类的class对象,这里指的就是FragmentManagerImpl
    Class<? extends FragmentManager> aClass = fm.getClass();
    try {
        //1.获取其mAdded字段
        Field f = aClass.getDeclaredField("mAdded");
        f.setAccessible(true);
        //强转成ArrayList
        ArrayList<Fragment> list = (ArrayList) f.get(fm);
        //清空缓存
        list.clear();

        //2.获取mActive字段
        f = aClass.getDeclaredField("mActive");
        f.setAccessible(true);
        //强转成SparseArray
        SparseArray<Fragment> array = (SparseArray) f.get(fm);
        //清空缓存
        array.clear();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

记得使用第一种方案,第二第三中都未生效,放出来只是想问问大佬们

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

android_frost

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值