如何转换页面列表中的项目?(Android Arch组件页面库)
Android架构组件现在已经推出,非常棒 根据官方演示,如何转换页面列表中的项目?(Android Arch组件页面库),android,paging,android-architecture-components,android-paging,Android,Paging,Android Architecture Components,Android Paging,Android架构组件现在已经推出,非常棒 根据官方演示,DataSource.Factory现在支持map和mapByPage方法,这意味着我们可以在一个DataSource中转换项 但是DataSource和DataSource.Factory应该在模型层,而不是Presentor/View层。然而,有很多时候我们需要在适配器中转换数据(对于RecyclerView或ListView),显然,这是Presentor/View层逻辑。到目前为止,适配器持有PagedList的实例,但是Page
DataSource.Factory
现在支持map
和mapByPage
方法,这意味着我们可以在一个DataSource
中转换项
但是DataSource
和DataSource.Factory
应该在模型层,而不是Presentor/View层。然而,有很多时候我们需要在适配器中转换数据(对于RecyclerView或ListView),显然,这是Presentor/View层逻辑。到目前为止,适配器持有PagedList
的实例,但是PageList
不支持这些操作,这有点尴尬。此外,我们还需要在页面列表
中添加或删除项目
这是一个功能请求:
页面列表上的项目转换
页面列表中添加/删除项目
欢迎任何讨论。我认为您需要对
PagedList
使用转换,而不是LiveData
例如,我有一个宠物列表,每个宠物都有性别。我需要在运行时显示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>
}
当用户更改Pet
的gender
时,您只需更新genderMutableData
的值,它将触发petItemsData
的数据源并更新Pet
项:
fun updatePetItemsWithNewGender(gender: String?) {
this@PetViewModel.genderMutableData.postValue("female")
}
很抱歉,我使用Kotlin作为例子,因为您不使用Java语言标记post。我认为域模型不是主要问题,您可以将PagedList视为域类,并在数据层中抽象工厂和datasoruce。我看到的问题是何时需要在表示层中进行转换。(假设拱门层作为数据域表示)添加新宠物怎么样?如何使用新宠物触发PagedListAdapter更新?@Slim_user71169这取决于Dao方法的返回类型。对于
LiveData
,Datasource.Factory
,。。。数据源将在模型更新时自动触发更改。我不认为您上面所做的是转换。要点是从数据库中提取模型a的页面列表,并将其转换为ViewModel中的LiveData。有这样的例子吗?这不是转化!OP要求的是,他不需要通过submitList
将PagedListAdapter
传递给PagedListAdapter
,而是需要一种方法将Pet
转换为TransformedPet
,这样他就可以通过submitList
将PagedListAdapter>传递给PagedListAdapter
。现在,百万美元的问题是,由于Dao正在返回DataSource.Factory,如何获得PagedList
?有人知道如何将PagedList转换为PagedList吗
fun updatePetItemsWithNewGender(gender: String?) {
this@PetViewModel.genderMutableData.postValue("female")
}