Как остановить событие LiveData, запускаемое более одного раза - PullRequest
0 голосов
/ 14 февраля 2019

Я использую MutableLiveData в своем приложении для связи на основе событий.У меня есть одно занятие с двумя фрагментами архитектуры.

С помощью ViewModel я использую события LiveData во Фрагменте-1.Но когда я заменяю этот Фрагмент-1 на Фрагмент-2 с помощью строки меню и, наконец, возвращаюсь к Фрагменту-1, старые значения LiveData снова фиксируются.

Как избежать этой проблемы?Любая помощь / предложения высоко ценятся!Спасибо.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Везде, где вы наблюдаете liveData, в методе onChanged удалите наблюдателей, вызвав myLiveDataObject.removeObservers(this); Это приведет к удалению наблюдателя после того, как данные будут получены впервые.

0 голосов
/ 14 февраля 2019

Вы можете использовать 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>>()

...