我在列表中有500条以上记录,并且我每次都使用分页加载10条记录,应用于recyclerview的动画是我要使用的notifyDataChanged
动画,它会刷新recyclerview的所有项目,由于这个原因,我应用的动画无法正常运行。
任何想法如何只刷新recyclerview中的新数据,以便recyclerview的所有项目都不会更改。
答案 0 :(得分:1)
使用notifyItemRangeChanged()
方法,例如,如果您已经有10个项目,并且向下滚动添加到数组的10个新项目,则应该这样做:
notifyItemRangeChanged(10,array.size())
哪个是:notifyItemRangeChanged(int positionStart, int itemCount)
您应该使用notifyItemRangeChanged
,因为它仅在给定范围内重置项目。而不是notifyDataSetChanged
来重置RecyclerView
的所有项目。
答案 1 :(得分:1)
您可以使用此方法仅更新adapter
中新添加的数据,
adapter.notifyItemRangeChanged(int positionStart, int itemCount);
或使用
adapter.notifyItemRangeInserted(int positionStart, int itemCount);
在这里
positionStart:是插入数据的起始位置(大多数情况下,列表大小是在列表末尾插入的)
itemCount:是要插入列表的项目数
来自here的更多内容
notifyItemRangeInserted
通知所有注册的观察者新插入了从itemCount
开始的当前反映的positionStart
项。现在可以从位置positionStart
开始找到以前位于positionStart + itemCount
及以后的项目。
这是结构性变化事件。数据集中其他现有项目的表示形式仍被认为是最新的,并且不会反弹,尽管它们的位置可能会发生变化。
positionStart:插入的第一个项目的位置
itemCount:插入的项目数
notifyItemRangeChanged
通知所有注册的观察者,从位置itemCount
开始的positionStart
个项目已更改。等同于呼叫 notifyItemRangeChanged(position, itemCount, null);
。
这是项目更改事件,而不是结构更改事件。它表明在给定位置范围内数据的任何反映都已过时,应进行更新。给定范围内的项目保持相同的身份。
positionStart:第一个已更改项目的位置
itemCount:已更改的项目数
不同之处在于 notifyItemRangeInserted
将旧数据视为最新数据
答案 2 :(得分:0)
是的,您可以通过调用来指定将新数据插入到哪个位置
答案 3 :(得分:0)
您可以使用DiffUtil刷新特定的项目更改。 供参考,请检查此https://proandroiddev.com/diffutil-is-a-must-797502bc1149