如何停止LiveData事件被触发一次以上(How to stop LiveData event b

2019-09-27 13:30发布

我为我的基于事件的通信应用程序中使用MutableLiveData。 我有一个活动的两个片段架构。

随着视图模型的帮助下,我在消费片段-1 LiveData事件。 但是,当我使用菜单栏与片段-2取代这一片段-1终于回来片段-1,LiveData的旧值再次被抓获。

如何避免这个问题? 任何帮助/建议高度赞赏! 谢谢。

Answer 1:

您可以使用EventLiveData值来处理消耗它的价值在下面的文章: 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>>()



Answer 2:

无论你正在观察liveData,在onChanged方法通过调用删除观察员myLiveDataObject.removeObservers(this); 观察到第一次数据之后这将删除观察者。



文章来源: How to stop LiveData event being triggered more than Once