我遇到RecyclerView#Adapter
关于notifyItemRangeChanged
的问题。似乎如果Adapter
认为从上次拨打0
起大小为getItemCount
,然后我致电Adapter#notifyItemRangeChanged(0, 1)
,Adapter
就会忽略调用(例如,它不会导致插入新项目。)
这是预期的行为吗?
答案 0 :(得分:16)
这是预期的行为吗?
简答:是的。
来自notifyDataSetChanged()
上的文档(是的,不同的方法,我知道,但只是在这里引用它,因为它解释了项目更改和结构更改):
有两种不同类别的数据更改事件,项目更改和结构更改。项目更改是指单个项目的数据更新但未发生位置更改。结构更改是指在数据集中插入,删除或移动项目的时间。
现在阅读notifyItemRangeChanged()
的文档(我的重点):
这是项目更改事件,而不是结构更改事件。它表示给定位置范围内的数据的任何反映都已过期,应该更新。给定范围内的项目保持相同的身份。
那应该回答你的问题。您正在进行结构更改(即,您正在添加项目),因此notifyItemRangeChanged()
不是要调用的适当方法。相反,你应该调用notifyItemRangeInserted()
(或其单数等价物),这表明结构发生了变化。