前段时间,为了对项目中分页加载更新数据封装,出现了一个小bug,就是
java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid item position 18(offset:18).state:72
而且,这是recyclerview内部报出的bug,没有指出我项目中哪里的错,比如下图
看了一下我的代码,是这样写的
报出这个bug是在我上拉加载更多了一页后,再下拉刷新,也就是listData变小了才会出现
因为涉及到加载图片的时候,如果更新数据用notifyDataSetChanged会导致图片闪烁一下,所以用notifyItemRangeChanged进行局部更新,这里出现的情况是,本身我的recyclerView列表数已经是20个了,这时候下拉刷新,loadPage=1,获取到的listAdd为10个,项目的需求是只要下拉刷新就要把以前的数据清理掉,所以这里的运算结果是listData=10,然后执行notifyItemRangeChanged(0,10)就报错了,稍微改一下就可以了
当刷新时用notifyDataSetChanged,增加时用notifyItemRangeChanged,就可以避免这样的问题了
网友评论