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
вместо простой проверки?