- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
请帮帮我。
该应用程序仅用于接收来自 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/
我是一名优秀的程序员,十分优秀!