簡體   English   中英

android-僅在recyclerview中更新新數據

[英]android - Update new data only in recyclerview

我在列表中有500條以上的記錄,並且我每次使用分頁加載10條記錄時,應用到recyclerview的動畫我想做的就是當我使用notifyDataChanged刷新其recyclerview的所有項目時,由於這個原因,我應用了動畫我無法正常工作。

任何想法如何只刷新recyclerview中的新數據,以便recyclerview的所有項目都不會更改。

使用notifyItemRangeChanged()方法,例如,如果您已經有10個項目,並且向下滾動添加到數組中的10個新項目,則應該這樣做:

notifyItemRangeChanged(10,array.size())  

這是: notifyItemRangeChanged(int positionStart, int itemCount)

您應該使用notifyItemRangeChanged因為它僅在給定范圍之間重置項目。 而不是notifyDataSetChanged ,它會重置RecyclerView所有項目。

您可以使用此方法僅更新adapter新添加的數據,

adapter.notifyItemRangeChanged(int positionStart, int itemCount);

或使用

adapter.notifyItemRangeInserted(int positionStart, int itemCount);

這里,

positionStart:是插入數據的起始位置(大多數情況下,列表大小在列表末尾插入時)

itemCount:是插入列表的項目數

來自這里的更多


notifyItemRangeInserted

通知任何注冊的觀察者,新插入的是從positionStart開始的當前反映的itemCount項目。 現在可以從positionStart + itemCount開始找到以前位於positionStart及以后的項目。

這是一個結構性變化事件。 數據集中其他現有項目的表示形式仍被認為是最新的,並且不會反彈,盡管它們的位置可能會發生變化。

positionStart:插入的第一個項目的位置

itemCount:插入的項目數


notifyItemRangeChanged

通知所有注冊的觀察者的itemCount起始位置項positionStart已經改變。 等效於調用notifyItemRangeChanged(position, itemCount, null);

這是項目變更事件,而不是結構變更事件。 它表明在給定位置范圍內數據的任何反映都已過時,應進行更新。 給定范圍內的項目保留相同的標識。

positionStart:已更改的第一個項目的位置

itemCount:已更改的項目數


區別在於notifyItemRangeInserted將舊數據視為最新數據

是的,您可以通過以下方式指定插入新數據的位置:

RecyclerView.Adapter#notifyItemInserted(INT)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM