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()
    }

results matching ""

    No results matching ""