代码之家  ›  专栏  ›  技术社区  ›  SudoPlz

如何在上notifyDataSetChanged后不滚动RecyclerView.适配器

  •  1
  • SudoPlz  · 技术社区  · 6 年前

    有时我会替换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; notifyDataSetChanged() 我的RecyclerView滚动到下一个孩子。

    这个 仅限


    我试过跑步:

    int childCntWeLostAfterMutation = data.size() - newData.size();
    notifyItemRangeChanged(0, newData.size());
    notifyItemRangeRemoved(newData.size(), childCntWeLostAfterMutation);
    

    但是事情变得更糟了。它向后滚动了很长一段时间,完全弄乱了可见的位置。

    请不要告诉我 smoothScrollToPosition

    我已经在用了 setHasStableIds(true) 还有我的 public long getItemId(int position)

    请帮帮我!

    0 回复  |  直到 6 年前
    推荐文章