有时我正在替换我的ArrayList数据源中的所有数据,如下所示:
private ArrayList data;
public void replaceAll(ArrayList newItems) {
this.data.clear();
for (int i = 0; i < newItems.size(); i++) {
this.data.set(i, newItems.get(i));
}
notifyDataSetChanged();
}
但是,例如this.data.size() == 50;
和newItems.size() == 30;
因此数据从50个孩子变为30个,在我运行notifyDataSetChanged()
后,我的RecyclerView会滚动到下一个孩子。
(即如果我在第15位,它会进入16)
当newData大小小于旧数据时,会发生 ONLY ,我无法理解原因。
p.s1:我试过跑:
int childCntWeLostAfterMutation = data.size() - newData.size();
notifyItemRangeChanged(0, newData.size());
notifyItemRangeRemoved(newData.size(), childCntWeLostAfterMutation);
但事情变得更糟。它向后滚动了很多,它完全弄乱了可见的位置。
p.s2:请不要告诉我smoothScrollToPosition
,它超级凌乱,我觉得它不适用于我的情景。
p.s3:我已经在使用setHasStableIds(true)
,我的public long getItemId(int position)
会为每个孩子返回一个唯一的ID。
请帮忙!