RecyclerView notifyItemRangeChanged不显示新数据

时间:2015-09-24 19:04:25

标签: android android-recyclerview

我遇到RecyclerView#Adapter关于notifyItemRangeChanged的问题。似乎如果Adapter认为从上次拨打0起大小为getItemCount,然后我致电Adapter#notifyItemRangeChanged(0, 1)Adapter就会忽略调用(例如,它不会导致插入新项目。)

这是预期的行为吗?

1 个答案:

答案 0 :(得分:16)

  

这是预期的行为吗?

简答:是的。

来自notifyDataSetChanged()上的文档(是的,不同的方法,我知道,但只是在这里引用它,因为它解释了项目更改结构更改):

  

有两种不同类别的数据更改事件,项目更改和结构更改。项目更改是指单个项目的数据更新但未发生位置更改。结构更改是指在数据集中插入,删除或移动项目的时间。

现在阅读notifyItemRangeChanged()的文档(我的重点):

  

这是项目更改事件,而不是结构更改事件。它表示给定位置范围内的数据的任何反映都已过期,应该更新。给定范围内的项目保持相同的身份。

那应该回答你的问题。您正在进行结构更改(即,您正在添加项目),因此notifyItemRangeChanged() 不是要调用的适当方法。相反,你应该调用notifyItemRangeInserted()(或其单数等价物),这表明结构发生了变化。