IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionViewHolder{2064e5c6 position=2 id=-1, oldPos=2, pLpos:-1

很明显是数组越界问题

问题产生的根本原因就是数据集合不对应

数据集合不对应的原因在于使用页面下载了新的数据集,并且传递到了adapter里面,但是adapter里面缓存的position信息是前一个数据集的,而数据集却更新了,因为数据集的差异导致了与holder保存的东西不一致从而崩溃


图中第二个方法是正确的

从这两个方法的对比中很清楚的可以看到,是由于更新了数据集合而没有更新缓存的item导致的。

说到这,其实翻一下adapter的众多方法你会发现解决的办法有许多,这是其中一种:


下载完数据之后使用


使用的更新方法

goodlist是新下载的数据集,使用notifydatasetchange()的话我的也会有错,还使得刷新的特效没有了,使用这个方法不会有错还保留了特效效果。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。