Я думаю, вам нужно использовать преобразования для PagedList
вместо LiveData<List<YourModel>>
.
Например, у меня есть список Pet
, у каждого Pet
есть gender
. Мне нужно показать пейджинг Pet
и фильтр gender
во время выполнения.
Итак, мой интерфейс Дао может быть:
@Dao
inteface PetDao {
@Query("SELECT * FROM Pet WHERE Pet.gender = :gender ORDER BY Pet.id ASC")
fun getPetsByGenderDataFactory(gender: String?): Datasource.Factory<Int, Pet>
}
В классе ViewModel
я буду использовать Transformations
для фильтрации LiveData<PagedList<Pet>>
вместо LiveData<List<Pet>>
:
class PetViewModel {
private val genderMutableData: MutableLiveData<String> = MutableLiveData()
private val petItemsData: LiveData<PagedList<Pet>> = Transformations.switchMap(this@PetViewModel.genderMutableData) { petGender ->
LivePagedListBuilder(AppDatabase.getDefault().getPetDao().getPetsByGenderDataFactory(petGender), 20).build()
}
}
Когда пользователь меняет gender
на Pet
, вы просто обновляете значение genderMutableData
, он запускает источник данных для petItemsData
и обновляет элементы Pet
:
fun updatePetItemsWithNewGender(gender: String?) {
this@PetViewModel.genderMutableData.postValue("female")
}
Извините, я использую Kotlin, например, потому что вы не помечаете пост на языке Java.