我从导航组件开始,并且在使用livedata观察器时遇到了一些问题。
例如: 我有这个livedata,负责管理服务器的身份验证响应。
viewModel.authenticate.observe(this, Observer {
manageAuthResponse(it)
})
一切正常,我去了片段B。
但是,当我进入片段B并尝试返回到片段A(包含该实时数据)时,Observer
会再次使用先前的结果(SUCCESS)触发。
如何防止这种情况?
当我返回时,我想刷新此结果并防止激发livedata观察器。
答案 0 :(得分:2)
将您的LiveData对象包装在ConsumableValue
中
class ConsumableValue<T>(private val data: T) {
private var consumed = false
fun consume(block: ConsumableValue<T>.(T) -> Unit) {
if (!consumed) {
consumed = true
block(data)
}
}
}
然后在视图模型中
val authenticate = MutableLiveData<Consumable<AuthenticationObject>>()
以及您的片段中
viewModel.authenticate.observe(this, Observer { consumable ->
consumable.consume {
manageAuthResponse(it)
}
})