// this is your live data based on which event will occur
val timer = MutableLiveData<Boolean>()
// this is the live data for handling the event
val eventDismissFragment = MutableLiveData<Boolean>()
init{
// initialize event to false
eventDismissFragment.value = false
}
// this is the function that is called when the event occurred
fun onFinish() {
timer.value = 0
eventDismissFragment.value = true
}
// this is for resetting the value of LiveData after event is handled
fun onDismissFragmentComplete() {
eventDismissFragment.value = false
}
1.观察事件而不是计时器来消除片段
viewModel.eventDismissFragment.observe(viewLifecycleOwner, Observer { isFinished ->
if (isFinished){
// dismiss your fragment here but before dismissing
// notify the ViewModel that you handled the event
viewModel.onDismissFragmentComplete()
dismissFragment()
}
})
1条答案
按热度按时间oymdgrw71#
共享视图模型用于在多个观察者之间共享公共数据源。当您有一个源的多个观察者时,您不应该尝试只观察当前可见片段中的变化。如果这样做,可能会发生数据不一致。
假设你在一个片段中修改了ViewModel中的数据,如果其他片段停止观察它,它们可能有旧的数据值,但数据被改变了,因此数据不一致。
你要做的是观察一个事件,而不是陈述。你想消除片段,那是一个事件。要将LiveData用于事件,必须在事件完成时重置该值。因此,如果其他观察者观察它,他们不会发现事件正在发生。你可以在这里阅读更多关于它。下面是一个例子:
1.为事件状态创建LiveData
1.观察事件而不是计时器来消除片段