ViewPager.setOffscreenPageLimit()的一些记录

项目中出现了问题,查找原因是ViewPager.setOffscreenPageLimit()设置的预加载数量导致的,刚好记录一下。
1.setOffscreenPageLimit() 方法设置的默认值是1.这个设置的值有两层含义: 一是 ViewPager 会预加载几页; 二是 ViewPager 会缓存 2*n+1 页(n为设置的值)。如设置为n=1,当前在第一页,会预加载第二页,滑倒第二页,会预加载第三页,当滑倒第三页,第一页会销毁,第四页会加载。

所以ViewPager 中Fragment的生命周期了:setOffscreenPageLimit 的值影响的是 onViewDestory 方法.当缓存的 fragment 超过 setOffscreenPageLimit 设置的值后, 那些 fragment 的onViewDestory 方法会回调;

当然不想切换的时候去重新创建Fragment,可以将适配器FragmentPagerAdapter的方法重写就好了。
在这里插入图片描述
2.关于懒加载的实现。
因为setOffscreenPageLimit方法的默认值为1,所以Viewpage至少会预加载一页,预加载是有好处的,但是也有缺点,比如当前页面有网络请求之类的,预加载的页面也有,就会导致许多任务在等待,影响当前页面的数据请求。所以应该可见的时候去请求数据,本来想设置这个方法setOffscreenPageLimit的值为0 ,以为可以解决,但是查看了源码看到当设置为0或者负数的时候,都会返回的1,所以无效:
在这里插入图片描述
Fragment 里面有个方法 setUserVisibleHint(boolean isVisibleToUser) 方法. 这个方法可以判断当前页面是否对用户可见.
在这里插入图片描述
在这个方法里面具体去处理数据的加载就可以了。

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值