我有一个RecyclerView
有几种项目类型。它看起来像这样:
当新邮件到达时,我按日期对其进行排序并致电notifyDataSetChanged()
。它运行良好,但它会自动在新项目高度上滚动RecyclerView
。在这种情况下,我无法使用notifyItemInserted()
因为我在排序后不知道项目位置。
RecyclerView
如何强制notifyDataSetChanged()
在notifyItemInserted()
没有通话[2.3, 5.2, 1.2];
之后滚动?
答案 0 :(得分:6)
您可以通过4种方式尝试。因为我不知道你的视图高度是多少,所以我无法确定它是否真的有用。但是试一试
我。您不知道哪个具体项目可以更改。但是你知道这种变化的范围
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());
答案 1 :(得分:1)
你玩过myRecView.getLayoutManager().setStackFromEnd(boolean)
吗?
如果您可以确定在对可见部分上方或下方进行排序后是否已插入新项目,并且在此调用setStackFromEnd ()
的函数中使用true或false,则可以避免滚动。
我不知道它是否真的有用......
答案 2 :(得分:1)
您可以使用项目列表中的list.indexOf(yourItem)
了解新项目的插入位置。然后你可以拨打notifyItemInserted()