gpt4 book ai didi

android - 分页库 3.0 : How to pass total count of items to the list header?

转载 作者:行者123 更新时间:2023-12-03 17:10:33 28 4
gpt4 key购买 nike

请帮帮我。
该应用程序仅用于接收来自 https://trefle.io 的植物列表并在 RecyclerView 中显示。
我在这里使用分页库 3.0。
任务 :我想添加一个标题,其中将显示植物的总量。
问题 :我只是找不到将总项目的值传递给标题的方法。

    Data model:  
data class PlantsResponseObject(
@SerializedName("data")
val data: List<PlantModel>?,
@SerializedName("meta")
val meta: Meta?
) {
data class Meta(
@SerializedName("total")
val total: Int? // 415648
)
}
data class PlantModel(
@SerializedName("author")
val author: String?,
@SerializedName("genus_id")
val genusId: Int?,
@SerializedName("id")
val id: Int?)
数据源类:
class PlantsDataSource(
private val plantsApi: PlantsAPI,
private var filters: String? = null,
private var isVegetable: Boolean? = false

) : RxPagingSource<Int, PlantView>() {

override fun loadSingle(params: LoadParams<Int>): Single<LoadResult<Int, PlantView>> {
val nextPageNumber = params.key ?: 1
return plantsApi.getPlants( //API call for plants
nextPageNumber, //different filters, does not matter
filters,
isVegetable)
.subscribeOn(Schedulers.io())
.map<LoadResult<Int, PlantView>> {
val total = it.meta?.total ?: 0 // Here I have an access to the total count
//of items, but where to pass it?
LoadResult.Page(
data = it.data!! //Here I can pass only plant items data
.map { PlantView.PlantItemView(it) },
prevKey = null,
nextKey = nextPageNumber.plus(1)
)
}
.onErrorReturn{
LoadResult.Error(it)
}
}

override fun invalidate() {
super.invalidate()
}
}
LoadResult.Page 只接受植物本身的列表。并且 DataSource(Repo, ViewModel, Activity) 上面的所有类都无法访问响应对象。
问题 :如何将项目总数传递给列表标题?
我将不胜感激。

最佳答案

第一次尝试使用 Paging 时面临同样的困境,尽管它出于分页的目的进行计数,但它没有提供获取计数的方法(即 Paging 库首先检查 COUNT(*) 以查看是否有更多或在执行其余查询之前少于规定的 PagingConfig 值的项目,它可以完美地返回它找到的结果总数)。
目前实现这一目标的唯一方法是并行运行两个查询:一个用于您的项目(正如您已经拥有的那样),另一个仅用于计算使用与前一个相同的查询参数找到的结果数量,但用于 COUNT(*)只要。
没有必要将后者作为 PagingDataSource<LivedData<Integer>> 返回,因为它会不必要地添加大量样板文件。只需将其作为正常的 LivedData<Integer> 返回,以便在列表结果更改时它始终会自行更新,否则它可能会遇到列表大小更改的问题,并且如果您返回一个普通的 Integer,则该值在第一次加载后不会更新.
设置好它们之后,然后使用 RecyclerView 将它们添加到 ConcatAdapter 适配器,前面提到的适配器的顺序与您希望它们显示在列表中的顺序相同。
例如:如果您希望计数显示在列表的开头/顶部,则首先使用计数适配器设置 ConcatAdapter,然后设置列表项适配器。

关于android - 分页库 3.0 : How to pass total count of items to the list header?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63978124/

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