如何停止多次触发 LiveData 事件

Nin*_*gan 5 android mvvm mutablelivedata

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

在 ViewModel 的帮助下,我正在使用 Fragment-1 中的 LiveData 事件。但是,当我使用菜单栏将 Fragment-1 替换为 Fragment-2 并最终返回到 Fragment-1 时,再次捕获了 LiveData 的旧值。

如何避免这个问题?任何帮助/建议都非常感谢!谢谢你。

Jam*_*mal 5

您可以使用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
}
Run Code Online (Sandbox Code Playgroud)

假设您的 LiveData 值是一个字符串,那么单个事件的 LiveData 将如下所示:

val navigateToDetails = MutableLiveData<Event<String>>()