簡體   English   中英

如何在notifyDataSetChanged之后阻止RecyclerView中的自動滾動?

[英]How to prevent auto scroll in RecyclerView after notifyDataSetChanged?

我有一個包含多種項目類型的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());

你玩過myRecView.getLayoutManager().setStackFromEnd(boolean)

如果您可以確定在對可見部分上方或下方進行排序之后是否已插入新項目,並且在此調用setStackFromEnd ()函數中使用true或false,則可以避免滾動。

我不知道它是否真的有效......

您可以使用列表中的list.indexOf(yourItem)知道新項目的插入list.indexOf(yourItem) 然后你可以調用notifyItemInserted()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM