大家都知道viewpager默认会加载下一页数据,viewpager提供了一个方法setOffscreenPageLimit(),设置预加载页数
懒加载字面意思当需要的时候才去加载,不需要时不加载
之前处理fragment懒加载通过setUserVisibleHint + onHiddenChanged 这2个函数(详情此处省略),而在Androidx模式下此方法被弃用了 ,用FragmentTransaction.setMaxLifecycle()来代替
Google在Androidx下增加了 setMaxLifecycle 来控制fragment 所能调用最大的生命周期
如下所示

根据官方的注释,我们能知道,该方法可以设置活跃状态下 Fragment 最大的状态,如果该 Fragment 超过了设置的最大状态,那么会强制将 Fragment 降级到正确的状态。
那如何使用该方法呢?
viewpager+fragment 模式下
在 FragmentPagerAdapter 与 FragmentStatePagerAdapter 新增了含有 behavior 字段的构造函数,如下所示

其中Behavior的声明
根据注释说明 我们得到2点结论
- behavior 的值为
BEHAVIOR_SET_USER_VISIBLE_HINT,当 fragment对用户的可见状态发生改变时,setUserVisibleHint方法会被调用。 - behavior 的值为
BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT,当前选中的 fragment在Lifecycle.State#RESUMED状态 ,其他不可见的 fragment会被限制在Lifecycle.State#STARTED状态。
view pager的适配器为 FragmentPagerAdapter且 behavior为 BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT时



切换时

只有当前可见 fragment调用onResume。
add+hide+show模式下
基于 ViewPager 在 setPrimaryItem 方法中的思路,我们可以在调用 add+show+hide 时,
最后
关于 Fragment 的懒加载实现,非常愿意听到大家不同的声音,如果你有更好的方案,可以在评论区留下您的 idea,如有错误请指出,谢谢!
本文介绍在Androidx环境下,ViewPager结合Fragment实现懒加载的方法。通过FragmentTransaction.setMaxLifecycle()控制Fragment生命周期,利用BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT行为确保仅当前可见Fragment处于RESUMED状态。
784

被折叠的 条评论
为什么被折叠?



