通过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)