轉載請標明出處,維權必究:https://www.cnblogs.com/tangZH/p/10116095.html 我們為了移除RecycleView的某一項,會用RecycleView的notifyItemRemoved(int position)方法,但是需要註意的是:1、用該方法之後並不會 ...
轉載請標明出處,維權必究:https://www.cnblogs.com/tangZH/p/10116095.html
我們為了移除RecycleView的某一項,會用RecycleView的notifyItemRemoved(int position)方法,但是需要註意的是:
1、用該方法之後並不會刷新Item,也就是說不會重新bind數據,那麼position也就沒有刷新,每個Item對應的position還是原來的那個,那就會有問題,比如現在只剩下3個Item,而我們點擊刪除最後一個Item的時候,它的position是原來的position4,那麼實際上就是調用RecycleView的notifyItemRemoved(4),就會出現越界。
那我們該怎麼做呢?
1、刪除之後重新:notifyDataSetChanged();,但是這樣就沒有刪除動畫。
2、使用notifyItemRangeChanged(int positionStart, int itemCount)
這個方法,是通知所有觀察者: 從positinStart開始的itemCount這些個item已經改變了,與notifyItemRangeChanged(position, itemCount, null)
等價
positionStart : 是從界面哪個位置的Item開始變化,比如你點擊界面上的第二個ItemView positionStart是1
itemCount : 是已經發生變化的item的個數(包括自己,即正在點擊這個),比如,你點擊界面上的第二個ItemView,position [1,9] 發生變化,共計9個,因此我們計算是list.size() - position 此時使用: notifyItemRemoved(position); notifyItemRangeChanged(position, mList.size() - position); 註意如果有headView的話還需要將position加上對應的headView數目,比如有一個headView,那麼就需要: notifyItemRemoved(position + 1); notifyItemRangeChanged(position + 1, mList.size() - position);