【发布时间】:2021-11-20 06:29:55
【问题描述】:
我正在尝试做一些非常简单的事情:
在 recyclerview 中只显示一定数量的项目(比如说 5 个)。
正如我们所知,使用 ListAdapter 和 DiffUtil,您不需要重写 getItemCount() 方法。
但我需要显示固定数量的项目,所以我确实重写了该方法。
class AllNewsAdapter : ListAdapter<Article, AllNewsAdapter.AllNewsViewHolder>(AllNewsDiffCallback()) {
var list: List<Article> = listOf()
private val limit = 5
override fun getItemCount(): Int {
return if (list.size > limit){
limit
} else{
list.size
}
}
}
使用它,recyclerview 中不会显示任何项目。
但是当我删除整个 getItemCount() 方法时,所有项目都会显示出来,这是我不想要的
哦!,我也尝试过使用:
return Math.min(list.size(), 5)
但没有运气(没有显示任何项目)。
在使用 RecyclerView.Adapter 时,我可以做到这一点,但它不适用于 ListAdapter
【问题讨论】:
-
您正在“与框架作斗争”。要么使用常规适配器(并像 ListAdapter 那样在内部提供/使用 DIffUtil),要么转换数据(源)并且只将 5 个项目传递给 adapter.submitList()。这似乎是一个数据转换问题,而不是回收器视图的适配器问题。以我有限的经验,尝试破解 RV 的工作方式通常会导致意想不到的结果(不是我“反对它”,而是我的经验)。
-
同意@MartinMarconcini,为什么还要将所有不必要的数据传递给适配器?过滤数据,将其传递给适配器并通知它有关更改。这应该是最安全的方式。
标签: android kotlin android-recyclerview listadapter