MediatorLiveData против LiveData - PullRequest
       8

MediatorLiveData против LiveData

0 голосов
/ 15 ноября 2018

Я не могу получить представление о MediatorLiveData при работе с LiveData. В документации упоминается, что MediatorLiveData является подклассом LiveData, который будет наблюдать LiveData и реагировать на метод onChanged. Мой вопрос: в чем отличие от наличия функции в observe LiveData и выполнения каких-либо действий с данными, если новые данные отличаются?

Например, допустим, у меня есть запрос от Room Database, который возвращает LiveData, как показано ниже

@Query(“SELECT * FROM Users WHERE userid = :id”)
fun getUserById(id: String): LiveData<User>

Если я хочу использовать MediatorLiveData, у меня может быть расширение, как показано ниже

fun <T> LiveData<T>.distinctUntilChanged(): LiveData<T>{
    var lastValue: Any? = Any()
    return MediatorLiveData<T>().apply {
        addSource(this@distinctUntilChanged){
            if (it != lastValue){
                lastValue = it
                postValue(it)
            }
        }
    }
}

А затем используйте это в моей Деятельности как

userDao.getUserById("someId").distinctUntilChanged()
    .observe(this, user -> {/*Do something with user*/})

В противоположность приведенному выше сценарию, я могу просто использовать функцию-обертку внутри метода observe, как показано ниже

var lastUser = null
userDao.getUserById("someId")
    .observe(this, user -> {
        if (lastUser != user){
            lastUser = user
            /*Do something with user*/
        }
    })

Может кто-нибудь объяснить, почему я должен использовать MediatorLiveData вместо простой проверки?

...