解决ViewPager缓存导致不能实时刷新数据

本文探讨了在使用ViewPager+Fragment时遇到的数据不是最新问题,这是因为Fragment预加载导致的。文章提供了一种解决方案:通过BaseFragment类中的setUserVisibleHint方法来判断Fragment的可见性,并在可见时调用loadData方法更新数据。

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

ViewPager+Fragment,但是Fragment有个不好或者太好的地方。例如你在ViewPager中添加了三个Fragment,当加载ViewPager中第一个Fragment时,它会默认帮你预先加载了第二个Fragment,当你加载第二个Fragment时,它会帮你加载第三个Fragment。

这样用户使用的体验是不错的,但是这样可能导致每次滑动切换页面时,显示的数据都不是最新的数据。而是ViewPager预加载从内存中读取的数据。

我们怎么去解决这种问题。及时的去刷新数据。

在fragment中有这样两个个方法 void setUserVisibleHint(boolean isVisibleToUser)、boolean getUserVisibleHint() 这两个方法分别是设置fragment可见状态和获取当前fragment可见

状态,取消预加载我们应该在这里面去进行设置。在BaseFrament中去写这样一段逻辑。

  

public abstract class BaseFragment extends Fragment {
     
    /** Fragment当前状态是否可见 */
    protected boolean isVisible;
     
     
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
         
        if(getUserVisibleHint()) {
            isVisible = true;
            visible();
        } else {
            isVisible = false;
            inVisible();
        }
    }
     
     
    /**
     * 可见
     */
    protected void visible() {
        loadData();    
    }   
    /**
     * 不可见
     */
    protected void inVisible() {
         
         
    }
    /**
     * 延迟加载
     * 子类必须重写此方法
     */
    protected abstract void loadData();
}

转载于:https://www.cnblogs.com/lyjsmile/p/7434694.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值