Android Lazy Fragment 懒加载

564 阅读1分钟

通过LifecycleEventObserver监听生命周期实现Fragment懒加载,支持show/hide,嵌套,navigation等
不多BB直接上代码
传送门

open class LazyFragment : Fragment() {
    var isInitLazy = false
    private val lifecycleEventObserver =
        LifecycleEventObserver { _, event ->
            //event.targetState androidx.appcompat:appcompat:1.3.0才有此方法
            //升级到1.3.0或者改用event.name = Lifecycle.State.RESUMED.name
            if (event.targetState == Lifecycle.State.RESUMED) {
                if (!isInitLazy) {
                    lazyData()
                    isInitLazy = true
                }
            }
        }

    override fun onAttach(context: Context) {
        super.onAttach(context)
        lifecycle.addObserver(lifecycleEventObserver)
    }

    override fun onDetach() {
        super.onDetach()
        lifecycle.removeObserver(lifecycleEventObserver)
    }

    open fun lazyData() {
    }
}

提示: show fragment的时候要设置当前可见framgent的maxLifecycle为Lifecycle.State.RESUMED
其他fragment设置为Lifecycle.State.STARTED
fragmentTransaction.setMaxLifecycle(fragment,Lifecycle.State.RESUMED)