I have a RecyclerView
with several items types. It looks like this:
When new messages arrived I sort it by date and call notifyDataSetChanged()
. It works well, but it automatically scroll my RecyclerView
on new item(s) height. In this case I cannot use notifyItemInserted()
because I don't know item position after sorting.
How to force RecyclerView
do not scroll after notifyDataSetChanged()
without call notifyItemInserted()
?
There are 4 ways you can try. Because I don't know what is the height of your view, so I can't sure if it really works. But let give it a try
I. You don't which specific item could be changed. But you know the range of that change
mAdapter.notifyItemInserted(position);
mAdapter.notifyItemRangeChanged(0, list.size());
II. Clear list before call notifyDataSetChanged()
yourList.clear();
mAdapter.notifyDataSetChanged();
III. Save/Reset state of ReyclerView
before/after adding new item
// Save state
private Parcelable recyclerViewState;
recyclerViewState = recyclerView.getLayoutManager().onSaveInstanceState();
// Restore state
recyclerView.getLayoutManager().onRestoreInstanceState(recyclerViewState);
IV. Use this function
mAdapter.notifyItemRangeChanged(0, list.size());
Have you played with myRecView.getLayoutManager().setStackFromEnd(boolean)
?
If you can determine if the new item has been inserted after sorting above or below the visible part and in function of this call setStackFromEnd ()
with true or false maybe you can avoid the scroll.
I do not know if it will really work ....
You can know where the new item has been inserted using list.indexOf(yourItem)
on your list of items. Then you can call notifyItemInserted()
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.