2017-02-15 10 views
0

RecyclerViewで何もカスタマイズしなかったため、項目の追加/削除時にデフォルトのアニメーションが表示されます。私はアニメーションが期待どおりに動作していないことがわかった。私は次のコードでアイテムを削除する場合:RecyclerViewから項目を削除するとうまく機能しない

mComments.remove(position); 
notifyItemRemoved(position); 

私はそれは常に間違ったものを削除し、もう1つは既に削除されなければならない現れて保持し、他の人をオーバーレイUIに表示されます。

new CountDownTimer(60000, 1000) { 
    @Override 
    public void onTick(long l) { 
     for (int i = 0; i < mComments.size(); i++) { 
      RoomMessage item = mComments.get(i); 
      item.timeRemaining -= 1000; 

      if (item.timeRemaining <= 0) { 
       Log.v(TAG, "Going to remove no." + i + ". And the content = " + mComments.get(i).text); 
       removeAt(i); 
      } 
     } 
    } 

    @Override 
    public void onFinish() { 
     start(); 
    } 
}.start(); 

ログによれば、私は正しいものを削除しました。以下を参照してください。

02-16 15:26:38.274 21861-21861/com.xxxx.android V/ChatsAdapter: Going to remove no.0. And the content = 1 
02-16 15:26:41.284 21861-21861/com.xxxx.android V/ChatsAdapter: Going to remove no.0. And the content = 2 
02-16 15:26:42.284 21861-21861/com.xxxx.android V/ChatsAdapter: Going to remove no.0. And the content = 3 

どうしたのですか?

ところで、私は唯一のnotifyItemRemoved(position);。あなたは両方を使用している

答えて

0

使用setisRecyclable(false)を設定しました。 notifyItemRemovedは、以前に位置したアイテムがデータセットから削除されたことを通知するためのものです。 notifyItemRangeChanged(int positionStart, int itemCount)は、位置positionStartで始まるitemCount項目が変更されたことを登録されたオブザーバーに通知する場合にのみ使用されます。単一品目を追加する場合はnotifyItemInsertedを使用してください。複数のアイテムを追加した場合は、notifyItemRangeInserted(int positionStart, int itemCount)を使用してください。 で終わるメソッドが変更されたは、その特定の項目または行の値が変更されたことを示します。

+0

@Dayo Choul Any updates? –

+0

が更新されました。ログによると、画面上で間違ったものを削除している間に正しいものを削除してしまったのは非常に奇妙です。 –

+0

@Dayo Choulので、私の答えはあなたを助けませんでしたか?また、ログを投稿することもできます。私はアニメーションに答えました。 –

関連する問題