Closed clbDream closed 2 years ago
复现视频:VID_20221027.mp4.zip
小伙子,根据你提供的复现步骤,我这边测试了一下,延迟 5 秒后删除了列表倒数第二条数据,然后不断点击最后一条 itemView,并没有复现到你所说的这个问题。
你这个复现步骤不对,我上传了视频
20221029_180626.zip 应该是position没有刷新的问题
小伙子,看了你的视频,我认为我的复现步骤和你的视频中没有什么不同,都是删除最后第二个条目,然后点击最后第一个条目,但是我的不会出现你说的那种情况。
劳烦小伙子,下载一份 AndroidProject-Kotlin 的源码,并修改源码成能够复现这个问题的,然后重新打包上传到 issue 评论区中来,我这边来进行验证。
主要是这里,因为你测试的时候只是toast position,并没有获取具体数据,所以没有出现索引越界
20221031_160329.zip 我简单写了一下,长按删除
小伙子,我用第一张图片就会出现你说的那个问题,但是用第二种就不会,但是第一种方式是你自己搞出来的,你确定这个不是自己的问题?
那就是不能再adapter内部remove?
小伙子,问题的根本原因是,你直接在 ViewHolder 中拿 itemView 设置的点击监听,你拿 onBindView 的 position 位置是不准确的,因为你在 removeItem 的时候,这个方法调用的是 notifyItemRemoved 方法,该方法不会触发其他的 ViewHolder 重新绑定数据,导致当前条目设置监听的时候还是用之前的位置,你再点击就直接报错了。
【警告:请务必按照 issue 模板填写,不要抱有侥幸心理,一旦发现 issue 没有按照模板认真填写,一律直接关闭】
问题描述
框架版本【必填】:13.2
问题描述【必填】:notifyItemRemoved导致的数组下标越界问题
复现步骤【必填】:调用 notifyItemRemoved 之后,如果你移除的刚好是倒数第二个数据,此时点击最后一条数据,会报索引越界
是否必现【必填】:是
出现问题的手机信息【必填】:跟手机无关
出现问题的安卓版本【必填】:跟安卓版本无关
请回答
是部分机型还是所有机型都会出现【必答】:全部(例如:某为,某 Android 版本会出现)
AndroidProject 最新的版本是否存在这个问题【必答】:是(如果用的是旧版本的话,建议升级看问题是否还存在)
是否已经查阅框架文档还未能解决的【必答】:否(文档会提供最常见的问题解答,可以看看是否有自己想要的)
issue 是否有人曾提过类似的问题【必答】:否(看看曾经有人提过类似的问题,先参考一下别人是怎么解决的)
是否可以通过 AndroidProject 工程来复现该问题【必答】:是(排查一下是不是自己的项目代码写得有问题导致的)
使用原生的权限 API 是否会出现该问题【必答】:是(排查一下是不是 AndroidProject 的代码存在问题导致的)
其他
提供报错堆栈(如果有报错的话必填,注意不要拿被混淆过的代码堆栈上来)
提供截图或视频(根据需要提供,此项不强制)
提供解决方案(如果已经解决了的话,此项不强制)
根据网上的文章,我在基类中做了部分调整,目前没有问题