RecyclerView.notifyItemRemoved导致的数组下标越界问题

简介: 我们一般在RecyclerView列表中移除某条Item时会调用 notifyItemRemoved 方法,其还附带了相应的移除特效。

我们一般在RecyclerView列表中移除某条Item时会调用 notifyItemRemoved 方法,其还附带了相应的移除特效。使用虽然简单,却埋了一个大坑;


当你调用 notifyItemRemoved 之后,如果你移除的刚好是倒数第二个数据,此时点击最后一条数据,就会惊讶的发现当前点击的下标居然没变,然后抛出数组越界的错误。为什么呢,原因如下:


众所周知,RecyclerView更新数据采用了观察者模式,当我们调用 notifyItemRemoved 之后,就会通知已注册的观察者此条数据已被移除,但是对于当前的列表的实际位置,并不会发生改变。所以此时我们点击别的位置,对应的position位置依然时移除前的位置,如果你正恰好移除的是倒数第二条数据,此时点击的是最后一条数据的位置,就会出现下标越界。

说了这么多,解决办法呢?

(

])

notifyItemRangeChanged 方法是干啥的呢?

从方法名就可知道,刷新指定范围的item.那为什么要刷新从当前位置刷新到当前列表最后一个item呢,也不难理解,因为移除位置前的下标没变啊,受到影响的只是当前下标至最后一个item-1;

目录
相关文章
|
7月前
Fragment 出栈的方法popBackStack
Fragment 出栈的方法popBackStack
133 0
|
7月前
|
算法 C++
(C++)复写零--双指针法
(C++)复写零--双指针法
57 0
|
安全
ArrayList中remove()方法删除元素之后下标重定位的问题
ArrayList中remove()方法删除元素之后下标重定位的问题
|
算法 Java
Java实现二分法查找数组中某一个元素
Java实现二分法查找数组中某一个元素
198 0
|
Java
ArrayList 循环遍历并删除元素的常见陷阱
ArrayList 循环遍历并删除元素的常见陷阱
111 0
迭代器遍历元素并给集合中添加元素时报ConcurrentModificationException
迭代器遍历元素并给集合中添加元素时报ConcurrentModificationException
108 0
ArrayList 三种遍历方法(for循环+下标、foreach、使用迭代器)
ArrayList 三种遍历方法(for循环+下标、foreach、使用迭代器)
数据结构题:由逆置数组方法——逆置线性表L的所有元素
数据结构题:由逆置数组方法——逆置线性表L的所有元素
数据结构题:由逆置数组方法——逆置线性表L的所有元素
v-for遍历对象、数组
v-for遍历对象、数组
125 0