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