ViewPager2重大更新,支持offscreenPageLimit

ViewPager2预加载和缓存

ViewPager2预加载即RecyclerView的预加载,代码在RecyclerView的GapWorker中,这个知识可能有些同学不是很了解,推荐先看这篇博客

https://medium.com/google-developers/recyclerview-prefetch-c2f269075710

在ViewPager2上默认开启预加载,表现形式是在拖动控件或者Fling时,可能会预加载一条数据;下面是预加载的示意图:

如何关闭预加载?

((RecyclerView)viewPager.getChildAt(0))

.getLayoutManager().setItemPrefetchEnabled(false);

预加载的开关在LayoutManager上,只需要获取LayoutManager并调用setItemPrefetchEnabled()即可控制开关;

ViewPager2默认会缓存2条ItemView,而且在最新的RecyclerView中可以自定义缓存Item的个数;

RecyclerView

public void setItemViewCacheSize(int size) {

mRecycler.setViewCacheSize(size);

}

小结:

预加载和缓存在View层面没有本质的区别,都是已经准备了布局,但是没有加载到parent上;预加载和离屏加载在View层面有本质的区别,离屏加载的View已经添加到parent上;

提前加载对Adapter影响

所谓的提前加载,是指当前position不可见但加载了布局,包括上面说的预加载和离屏加载,下面先介绍一下Adapter:

ViewPager2的Adapter本质上是RecyclerView.Adapter,下面列举常用方法:

  • onCreateViewHolder(ViewGroup parent, int viewType)创建ViewHolder

  • onBindViewHolder(VH holder, int position)绑定ViewHolder

  • onViewRecycled(VH holder)当View被回收

  • onViewAttachedToWindow(VH holder)当前View加载到窗口

  • onViewDetachedFromWindow(VH holder)当前View从窗口移除

  • getItemCount()//获取Item个数

下面主要针对ItemView的创建来说,暂不讨论回收的情况;

  • onBindViewHolder 预加载和离屏加载都会调用

  • onViewAttachedToWindow 离屏加载ItemView会调用,可见ItemView会调用

  • onViewDetachedFromWindow 从可见到不可见的ItemView(除离屏中)必定调用

小结:

预加载和缓存在Adapter层面没有区别,都会调用onBindViewHolder方法;预加载和离屏加载在Adapter层面有本质的区别,离屏加载的View会调用onViewAttachedToWindow;

ViewPager2对Fragment支持

目前,ViewPager2对Fragment的支持只能使用FragmentStateAdapter,使用起来也是非常简单:

默认情况下,ViewPager2是开启预加载关闭离屏加载的,这种情况下,切换页面对Fragment生命周如何?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值