我为我的基于事件的通信应用程序中使用MutableLiveData。 我有一个活动的两个片段架构。
随着视图模型的帮助下,我在消费片段-1 LiveData事件。 但是,当我使用菜单栏与片段-2取代这一片段-1终于回来片段-1,LiveData的旧值再次被抓获。
如何避免这个问题? 任何帮助/建议高度赞赏! 谢谢。
我为我的基于事件的通信应用程序中使用MutableLiveData。 我有一个活动的两个片段架构。
随着视图模型的帮助下,我在消费片段-1 LiveData事件。 但是,当我使用菜单栏与片段-2取代这一片段-1终于回来片段-1,LiveData的旧值再次被抓获。
如何避免这个问题? 任何帮助/建议高度赞赏! 谢谢。
您可以使用Event
包LiveData
值来处理消耗它的价值在下面的文章: https://medium.com/androiddevelopers/livedata-with-snackbar-navigation-and-other-events-the-singleliveevent-case-ac2622673150
事件类将是这样的:
open class Event<out T>(private val content: T) {
var hasBeenHandled = false
private set // Allow external read but not write
/**
* Returns the content and prevents its use again.
*/
fun getContentIfNotHandled(): T? {
return if (hasBeenHandled) {
null
} else {
hasBeenHandled = true
content
}
}
/**
* Returns the content, even if it's already been handled.
*/
fun peekContent(): T = content
}
让我们说你LiveData值是一个字符串,则单个事件的LiveData会是这样:
val navigateToDetails = MutableLiveData<Event<String>>()
无论你正在观察liveData,在onChanged
方法通过调用删除观察员myLiveDataObject.removeObservers(this);
观察到第一次数据之后这将删除观察者。