我有一个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(使用前将#替换为@)