2017-06-19 66 views
0

在我的recyclerview中,我有一個滑動刪除以及撤消操作。 每當我撤銷我所做的刪除操作時,列表後面會出現一行。爲什麼調用scrollToPosition會在列表後面創建一行?

這裏是我的應用程序的當前設置:

Activity 
- Fragment 
    - Recyclerview 

這是我的刪除操作。這是recyclerview轉接器內:

cards.remove(pos); 
notifyItemRemoved(pos); 

這裏是我的撤消操作:

#inside my fragment 
adapter.undoDiscard(pos, card); 
layoutManager.scrollToPosition(pos); 

#inside my adapter 
public void undoDiscard(int pos, Card card) { 
    cards.add(pos, card); 
    notifyItemInserted(pos); 
} 

這裏是我的意見,到目前爲止:

  1. 當從Activity創建recyclerview中,沒有出現錯誤
  2. 當我關閉recyclerview的動畫時,該錯誤不會發生
  3. 的錯誤似乎來自scrollToPosition
  4. 的錯誤不會發生,當我使用notifyDataSetChanged

爲了說明問題,這裏是一個樣本圖像。 enter image description here

呼籲撤消後:

enter image description here

回答

0

該缺陷是由recyclerview的動畫而引起的。因此,解決方法是暫時關閉動畫,同時調用scrollToPosition。在我的情況下,我使用snackbar爲用戶提供撤銷更改的選項。所以我在解散小吃店後帶回了動畫。

snackbar.addCallback(new Snackbar.Callback() { 
     @Override 
     public void onDismissed(Snackbar snackbar, int event) { 
      super.onDismissed(snackbar, event); 
      recyclerview.setItemAnimator(animator); 
    }) 
相關問題