我遇到了RecyclerView和RecyclerView.Adapter的問題。我有一個函數將項目列表設置到適配器中。當用戶刷卡刷新,我加載新的數據,這意味着一些項目是新的,然後我將項目設置到適配器,我必須使它們無效。我的問題是notifyItemRangeInserted()
和notifyItemRangeChanged()
。當新項目出現時,如果我第一次刪除它們,然後notifyItemRangeRemoved()
,然後添加並最終打電話notifyItemRangeInserted()
它會工作,但所有項目都無效,並閃爍。否則,如果我確定新舊數據集之間的差異大小,則不會使適當的元素無效。Android RecyclerView適配器項刷新
public void setItems(@NonNull List<ItemType> items) {
final int oldSize = mItems.size();
mItems.clear();
notifyItemRangeRemoved(firstPosition(), oldSize);
mItems.addAll(items);
notifyItemRangeInserted(firstPosition(), items.size());
}
mItems
是ArrayList。
什麼是'firstPosition'?\ – Blackbelt
firstPosition()正在檢查適配器是否有標頭。如果頭部存在,則它將爲1,否則爲0.我通過執行notifyItemRangeInserted(firstPosition(),oldSize)來解決這個當前問題;'但是隻更新一小塊物品的問題在沒有先移除舊的項目,然後申請新的。這種方式閃爍將出現,但這是我目前的解決方案可以接受的。 – John