当前的监听方法通过fragment.lifecycle添加了Observer,
fragment.lifecycle关联的是fragment的生命周期,而非fragment.view的生命周期,
fragment.lifecycle.addObserver { destroyed() }
由于fragment.view活跃的生命周期存在明显比fragment活跃生命周期短的情况,
(如采用Navigation库管理fragment(attach/detach))
正确的做法是采用fragment.viewLifecycleOwner.lifecycle添加Observer。
Simple one-liner ViewBinding in Fragments and Activities with Kotlin
中fragment生命周期监听的方法是正确的
(其中onDestroy回调与fragment.onDestroyView()回调对应)
fragment.lifecycle.addObserver(object : DefaultLifecycleObserver {
override fun onCreate(owner: LifecycleOwner) {
fragment.viewLifecycleOwnerLiveData.observe(fragment) { viewLifecycleOwner ->
viewLifecycleOwner.lifecycle.addObserver(object : DefaultLifecycleObserver {
override fun onDestroy(owner: LifecycleOwner) {
binding = null
}
})
}
}
})
PS: observers可以不额外手动remove,因为fragment.lifecycle和LiveData都在DESTROYED时做了反注册。
当前的监听方法通过fragment.lifecycle添加了Observer,
fragment.lifecycle关联的是fragment的生命周期,而非fragment.view的生命周期,
fragment.lifecycle.addObserver { destroyed() }由于fragment.view活跃的生命周期存在明显比fragment活跃生命周期短的情况,
(如采用Navigation库管理fragment(attach/detach))
正确的做法是采用fragment.viewLifecycleOwner.lifecycle添加Observer。
Simple one-liner ViewBinding in Fragments and Activities with Kotlin
中fragment生命周期监听的方法是正确的
(其中onDestroy回调与fragment.onDestroyView()回调对应)
PS: observers可以不额外手动remove,因为fragment.lifecycle和LiveData都在DESTROYED时做了反注册。