[英]How to prevent auto scroll in RecyclerView after notifyDataSetChanged?
我有一個包含多種項目類型的RecyclerView
。 它看起來像這樣:
當新消息到達時,我按日期排序並調用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());
你玩過myRecView.getLayoutManager().setStackFromEnd(boolean)
?
如果您可以確定在對可見部分上方或下方進行排序之后是否已插入新項目,並且在此調用setStackFromEnd ()
函數中使用true或false,則可以避免滾動。
我不知道它是否真的有效......
您可以使用列表中的list.indexOf(yourItem)
知道新項目的插入list.indexOf(yourItem)
。 然后你可以調用notifyItemInserted()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.