Fragment懒加载几个必知知识点
fragment懒加载实现的关键在于setUserVisibleHint(isVisibleToUser: Boolean)
在fragment对用户由可见变为不可见以及由不可见变为可见时都会回调,isVisibleToUser变量,负责保存当前fragment对用户的可见状态,该方法的回调时机与fragment的生命周期没有任何关系。
引入一个标志位 isPrepareView 判断Fragment的view是否创建完成,不然,很容易会造成空指针异常。我们初始化该变量为false
在onViewCreated中,也就是view创建完成后,将其赋值为true
数据初始化只应该加载一次,因此,引入第二个标志位,isInitData,初始为false,在数据加载完成之后,将其赋值为true
**结合上面3点,Fragment加载满足条件如下:
1,Fragment对用户可见 (isVisibleToUser -> true)
2, Fragment的视图刷新完毕 (isPrepareView -> true)
3,数据还没有被加载过 (isInitData -> false)**
private fun lazyInitData() {
if (!isInitData && isVisibleToUser && isPrepareView) {
isInitData = true
initData()
}
}
懒加载的调用时机:
/*当fragment由可见变为不可见和不可见变为可见时回调*/
override fun setUserVisibleHint(isVisibleToUser: Boolean) {
this.isVisibleToUser = isVisibleToUser
lazyInitData()
}
/*fragment生命周期中onViewCreated之后的方法 在这里调用一次懒加载 避免第一次可见不加载数据*/
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
lazyInitData()
}