gpt4 book ai didi

android - 如何转换 PagedList 中的项目?(Android Arch 组件分页库)

转载 作者:太空宇宙 更新时间:2023-11-03 10:58:51 25 4
gpt4 key购买 nike

现在引入了 Android 架构组件 Paging Library ,这很棒。

根据官方演示 DataSource.Factory 现在支持mapmapByPage 方法,这意味着我们可以在一个数据源

但是DataSourceDataSource.Factory应该在model层,而不是Presentor/View层。然而,很多时候我们想要在 Adapter 中转换数据(对于 RecyclerView 或 ListView),显然,这是 Presentor/View 层逻辑。现在,Adapter 持有PagedList 的一个实例,但是PageList 不能支持这些操作,这有点尴尬。此外,有时我们还想向 PagedList 添加项目或从中删除项目。

所以这是一个功能请求:

  1. 支持 PagedList

    上的项目转换
  2. 支持在 PagedList

    中添加/删除项目

欢迎讨论。

最佳答案

我认为您需要对 PagedList 使用转换而不是 LiveData<List<YourModel>> .

例如,我有一个列表 Pet , 每个 Petgender .我需要显示 Pet 的分页和过滤器 gender在运行时。

所以,我的 Dao 接口(interface)可能是:

@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()
}

}

当用户更改时genderPet ,您只需更新 genderMutableData 的值, 它将触发 petItemsData 的数据源并更新 Pet项目:

fun updatePetItemsWithNewGender(gender: String?) {
this@PetViewModel.genderMutableData.postValue("female")
}

抱歉,我使用的是 Kotlin,因为您没有用 Java 语言标记帖子。

关于android - 如何转换 PagedList 中的项目?(Android Arch 组件分页库),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50058825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com