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
相关产品推荐
相关产品推荐

