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

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

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


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


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

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

(

])

notifyItemRangeChanged 方法是干啥的呢?

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

目录
相关文章
|
5月前
|
存储 算法 C++
c++数组详细介绍(二)
c++数组详细介绍(二)
97 0
|
17天前
|
存储 算法 编译器
C 数组详解
在C语言中,数组是一种用于存储多个同类型数据的集合。本文介绍了数组的基本特性与使用方法,包括定义与初始化、索引访问、多维数组、指针操作、大小计算及函数传递等内容。数组名可视为指向首元素的指针,支持遍历、排序与查找等常见操作。数组大小固定,访问越界会导致未定义行为。此外,还可以将数组嵌套在结构体中以增加数据复杂性。
43 10
|
5月前
|
存储 C++ 索引
c++数组
c++数组
50 2
|
5月前
|
存储 C++ 索引
C++数组
C++数组
48 0
|
5月前
|
存储 搜索推荐 程序员
C++ 数组
C++ 数组
39 0
|
12月前
|
存储 C语言
C 数组
C 数组。
32 0
|
5月前
数组练习2
数组练习2。
26 2
|
11月前
|
机器学习/深度学习 Java
【数组的使用】
【数组的使用】
41 0
数组相关练习
数组相关练习
49 0
|
C# 索引
C#视频-数组
C#视频-数组
49 0