我认为您需要使用转换来PagedList代替LiveData<List<YourModel>>.
例如,我有一个列表Pet,每个Pet都有gender。我需要在运行时显示分页Pet和过滤gender。
所以,我的 Dao 界面可能是:
@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 语言标记帖子。