如何防止在notifyDataSetChanged后RecyclerView自动滚动?

2023-11-25

我有一个RecyclerView有多种项目类型。它看起来像这样:

  • 2017年7月21日
  • 留言1
  • 留言2
  • 留言3
  • 2017年7月22日
  • 留言4
  • 新消息标题
  • 留言5
  • 留言6

当新消息到达时,我按日期对其进行排序并致电notifyDataSetChanged()。它工作得很好,但它会自动滚动我的RecyclerView新项目的高度。在这种情况下我不能使用notifyItemInserted()因为我不知道排序后的项目位置。

如何强制RecyclerView之后不要滚动notifyDataSetChanged()不打电话notifyItemInserted()?


您可以尝试 4 种方法。因为我不知道你的视野高度是多少,所以我不能确定它是否真的有效。但让我们尝试一下

I.您不知道可以更改哪个特定项目。但你知道这种变化的范围

mAdapter.notifyItemInserted(position);                 
mAdapter.notifyItemRangeChanged(0, list.size());

II.通话前清除列表notifyDataSetChanged()

yourList.clear();
mAdapter.notifyDataSetChanged();

III.保存/重置状态ReyclerView添加新项目之前/之后

    // Save state
    private Parcelable recyclerViewState;
    recyclerViewState = recyclerView.getLayoutManager().onSaveInstanceState();

    // Restore state
    recyclerView.getLayoutManager().onRestoreInstanceState(recyclerViewState);

IV.使用此功能

mAdapter.notifyItemRangeChanged(0, list.size());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何防止在notifyDataSetChanged后RecyclerView自动滚动? 的相关文章

随机推荐