大家都知道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,如有错误请指出,谢谢!