我认为您需要使用转换来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 语言标记帖子。