如何在RecyclerView.Adapter

时间:2018-06-07 17:45:34

标签: android android-recyclerview recycler-adapter recyclerview-layout

有时我正在替换我的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。

请帮忙!

0 个答案:

没有答案