2017-06-19 63 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); 
    }) 
相关问题