LiveData 订阅者更改事件
LiveData subscriber changed event
LiveData 对象的所有者是否可以侦听 LiveData 的新 subscribtions/desubscriptions 并对此事件做出反应?
我有一个场景,如果有活跃的听众,所有者将做一些后台工作 - 否则不会。
处理此类用例的常用方法是扩展 LiveData
并覆盖 onActive and onInactive methods like it's done here。当 LiveData 本身在变为活动/非活动状态时应该执行一些操作时,这更适合,但它也应该很容易为 LiveData
创建一个包装器,它将 isActive
值公开为 属性 ,类似的东西应该可以工作:
class LiveDataWithState<T>(wrapped: LiveData<T>) : MediatorLiveData<T>() {
private val _isActive = MutableLiveData(false)
val isActive: LiveData<Boolean> get() = _isActive
init {
addSource(wrapped) { value = it }
}
override fun onActive() {
super.onActive()
_isActive.value = true
}
override fun onInactive() {
super.onInactive()
_isActive.value = false
}
}
LiveData 对象的所有者是否可以侦听 LiveData 的新 subscribtions/desubscriptions 并对此事件做出反应?
我有一个场景,如果有活跃的听众,所有者将做一些后台工作 - 否则不会。
处理此类用例的常用方法是扩展 LiveData
并覆盖 onActive and onInactive methods like it's done here。当 LiveData 本身在变为活动/非活动状态时应该执行一些操作时,这更适合,但它也应该很容易为 LiveData
创建一个包装器,它将 isActive
值公开为 属性 ,类似的东西应该可以工作:
class LiveDataWithState<T>(wrapped: LiveData<T>) : MediatorLiveData<T>() {
private val _isActive = MutableLiveData(false)
val isActive: LiveData<Boolean> get() = _isActive
init {
addSource(wrapped) { value = it }
}
override fun onActive() {
super.onActive()
_isActive.value = true
}
override fun onInactive() {
super.onInactive()
_isActive.value = false
}
}