【问题标题】:Using getItemCount with ListAdapter in Recyclerview在 Recyclerview 中使用 getItemCount 和 ListAdapter
【发布时间】: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


【解决方案1】:

将此添加到您的适配器:

    override fun submitList(list: MutableList<Article>?) {
    // replace 5 with any number you want
    if(list?.size?:0>5) super.submitList(list?.take(5))
    else super.submitList(list)
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-12
    • 2020-02-07
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    • 2021-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多