MediatorLiveData против LiveData

Я не могу получить представление о 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 вместо простой проверки?

0 ответов

Другие вопросы по тегам