Как обрабатывать изменения Android LiveData двумя различными способами (комната, пользователь)? - PullRequest
0 голосов
/ 31 января 2019

У меня есть приложение Android с базой данных Room, которое использует REST API.Комната действует как единый источник правды, т.е. я обновляю интерфейс, когда результат API сохраняется в Комнате.

На одном из моих экранов мне нужно показать отфильтрованный список (с последними обновлениями от API), например, список фильмов, отфильтрованных по автору.

Когда пользователь меняет фильтр авторов, список должен обновляться, но также и список должен обновляться при изменении фильмов в бэкэнде в результате вызова API (хранится в БД).

Во-вторых, я могу достичь с помощью LiveData> объекта, созданного из вызова Room, он будет отправлять изменения из Room db.

Но как мне включить изменения, активированные от пользователя (путем переключения фильтра)по тому же источнику (отфильтрованный список фильмов)?

1 Ответ

0 голосов
/ 07 июля 2019

Для всех остальных это на самом деле довольно просто с MediatorLiveData.

val selectedItem = MediatorLiveData<Voyage>() 

var voyages: LiveData<Resource<List<Voyage>>>

var voyageFilter = MutableLiveData<VoyageFilter>()

selectedItem.addSource(voyageFilter) { filter -> 
//do something   
 }

selectedItem.addSource(voyages) { listResource ->
        //do something

}
...