如何转换页面列表中的项目?(Android Arch组件页面库)

如何转换页面列表中的项目?(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

Android架构组件现在已经推出,非常棒

根据官方演示,
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")
    }