先看一張效果圖,這個刪除動畫用的是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());
}
}
這樣就是從後往前刪除,這樣索引就不會出現問題。也達到了自己預期的效果。