天天看點

RecyclerView.notifyItemRemoved導緻的數組下标越界問題

我們一般在RecyclerView清單中移除某條Item時會調用 notifyItemRemoved 方法,其還附帶了相應的移除特效。使用雖然簡單,卻埋了一個大坑;

當你調用 notifyItemRemoved 之後,如果你移除的剛好是倒數第二個資料,此時點選最後一條資料,就會驚訝的發現目前點選的下标居然沒變,然後抛出數組越界的錯誤。為什麼呢,原因如下:

衆所周知,RecyclerView更新資料采用了觀察者模式,當我們調用 notifyItemRemoved 之後,就會通知已注冊的觀察者此條資料已被移除,但是對于目前的清單的實際位置,并不會發生改變。是以此時我們點選别的位置,對應的position位置依然時移除前的位置,如果你正恰好移除的是倒數第二條資料,此時點選的是最後一條資料的位置,就會出現下标越界。

說了這麼多,解決辦法呢?

(

RecyclerView.notifyItemRemoved導緻的數組下标越界問題

])

notifyItemRangeChanged 方法是幹啥的呢?