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

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

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


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


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

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

(

])

notifyItemRangeChanged 方法是干啥的呢?

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

目录
相关文章
|
6月前
|
存储
数组的初识
数组的初识
|
5月前
数组(3)
数组(3)
34 2
|
5月前
|
存储 开发框架 .NET
C#中的数组探索
C#中的数组探索
|
6月前
|
存储 C++ 索引
C++数组
C++数组
54 0
|
6月前
|
存储 搜索推荐 程序员
C++ 数组
C++ 数组
46 0
|
6月前
数组练习2
数组练习2。
27 2
数组相关练习
数组相关练习
53 0
|
C# 索引
C#视频-数组
C#视频-数组
52 0
|
Serverless
数组练习
数组练习