RecyclerView中進(jìn)行刪除操作嗜闻,代碼如下
dataList.remove(position);
notifyItemRemoved(position);
這樣寫的話笑跛,很快會產(chǎn)生數(shù)據(jù)刪除錯亂和超出索引異常導(dǎo)致崩潰稚伍。
原因是函數(shù)里面的傳入的參數(shù)position,它是在進(jìn)行onBind操作時確定的叨襟,在刪除單項后,已經(jīng)出現(xiàn)在畫面里的項不會再有調(diào)用onBind機(jī)會辙培,這樣它保留的position一直是未進(jìn)行刪除操作前的postion值。
解決辦法:
先remove,再notifyItemRemoved邢锯, 最后再notifyItemRangeChanged
remove:把數(shù)據(jù)從list中remove掉扬蕊,
notifyItemRemoved:顯示動畫效果
notifyItemRangeChanged:對于被刪掉的位置及其后range大小范圍內(nèi)的view進(jìn)行重新onBindViewHolder