[英]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
將舊數據視為最新數據
是的,您可以通過以下方式指定插入新數據的位置:
您可以使用DiffUtil刷新特定的項目更改。 供參考,請檢查此https://proandroiddev.com/diffutil-is-a-must-797502bc1149
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.