android-仅在recyclerview中更新新数据

时间:2018-09-20 12:13:30

标签: android android-recyclerview recycler-adapter

我在列表中有500条以上记录,并且我每次都使用分页加载10条记录,应用于recyclerview的动画是我要使用的notifyDataChanged动画,它会刷新recyclerview的所有项目,由于这个原因,我应用的动画无法正常运行。

任何想法如何只刷新recyclerview中的新数据,以便recyclerview的所有项目都不会更改。

4 个答案:

答案 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)

是的,您可以通过调用来指定将新数据插入到哪个位置

RecyclerView.Adapter#notifyItemInserted(int)

答案 3 :(得分:0)

您可以使用DiffUtil刷新特定的项目更改。 供参考,请检查此https://proandroiddev.com/diffutil-is-a-must-797502bc1149