RecycleView的notifyItemRemoved使用注意
程序员文章站
2022-04-05 11:21:35
转载请标明出处,维权必究: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);
下一篇: 五虎上将死后,他们的后人有哪些作为呢?