RecyclerView帶有動畫的多條目刪除

先看一張效果圖,這個刪除動畫用的是RecyclerView默認的。

按照一般的基本思路,肯定是首先對數據源進行for循環,如果這個條目被選中,則進行刪除。這是我剛開始的代碼片段。

for (int i = 0; i < mDatas.size(); i++) {
       Patient patient = mDatas.get(i);
       if (patient.isChecked()) {
         mDatas.remove(i);//先從數據源中進行移除
         adapter.notifyItemRemoved(i);//在調用適配器的刪除
         adapter.notifyItemRangeChanged(0, mDatas.size());//進行條目的刷新
       }
}

但當我操作刪除的時候,出現了刪除不徹底的問題,就是我選擇了三條,但只刪除掉了兩條,我感覺應該是索引除了問題。但我並沒有深究,感覺這種方法行不通。

百度了一番之後,找到一種讓我豁然開朗的解決方案。通過forr循環,也就是倒着循環。

 for (int i = mDatas.size() - 1; i >= 0; i--) {
       Patient patient = mDatas.get(i);
       if (patient.isChecked()) {
           mDatas.remove(i);
           adapter.notifyItemRemoved(i);
           adapter.notifyItemRangeChanged(0, mDatas.size());
       }
}

這樣就是從後往前刪除,這樣索引就不會出現問題。也達到了自己預期的效果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章