You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RecyclerView使用ListAdapter时重写getItemCount限制展示数量失效如何解决

问题原因
  • ListAdapter 内部已通过 AsyncListDiffer 独立维护了一套数据集,你自定义的全局 list 变量没有和 ListAdapter 的数据同步:日常调用 submitList() 提交的新数据只会更新 ListAdapter 内部的数据集,不会同步到你自己声明的这个 list 变量,它会一直保持初始的空列表状态,因此 getItemCount 始终返回0,自然没有条目展示。
  • 你之前继承普通 RecyclerView.Adapter 时是自行维护数据集,自定义的列表变量和 getItemCount 逻辑对应,所以能正常生效。
解决方案

不需要额外自行维护列表变量,直接调用 ListAdapter 内置的 currentList 属性获取当前最新的数据集即可,修改后代码如下:

class AllNewsAdapter : ListAdapter<Article, AllNewsAdapter.AllNewsViewHolder>(AllNewsDiffCallback()) {
    private val limit = 5

    override fun getItemCount(): Int {
        return Math.min(currentList.size, limit)
    }
}
注意事项
  • 不要在自定义 ListAdapter 子类中额外声明全局列表变量存储数据,所有数据操作直接走官方提供的 submitList() 提交、currentList 读取即可,可避免数据不一致问题。
  • 后续如果需要调整展示条目上限,直接修改 limit 变量的数值即可,无需改动其他逻辑。

内容的提问来源于stack exchange,提问作者Ibramazin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 08:45:00