Inconsistency detected Invalid view holder adapter position
RecyclerView在添加数据的时候发生了异常.
java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionViewHolder{f82aa71 position=11 id=-1, oldPos=6, pLpos:6 scrap [attachedScrap] tmpDetached not recyclable(1) no parent}at android.support.v7.widget.RecyclerView$Recycler.validateViewHolderForOffsetPosition(RecyclerView.java:5297)at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5479)at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5440)at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5436)at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2224)at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1551)at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1511)at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:595)at android.support.v7.widget.RecyclerView.dispatchLayoutStep1(RecyclerView.java:3534)at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3310)...
复制代码
在RecyclerView#validateViewHolderForOffsetPosition(ViewHolder holder)
中
if (holder.mPosition < 0 || holder.mPosition >= mAdapter.getItemCount()) {throw new IndexOutOfBoundsException("Inconsistency detected. Invalid view holder "+ "adapter position" + holder);}
复制代码
holder.mPosition >= mAdapter.getItemCount()
为真,抛出了异常 发现mAdapter.getItemCount()
的值是正常的,但是holder.mPosition
值有问题,在某种情况下和getItemCount
的值一样大,此时条件为真。
接下来看了下RecyclerView
中有5个方法改变了mPosition
的值,分别是
Adapter#bindViewHolder()
ViewHolder#resetInternal()
ViewHolder#offsetPosition()
ViewHolder#flagRemovedAndOffsetPosition()
Recycler#tryGetViewHolderForPositionByDeadline()
分别打了断点,发现会引起崩溃的代码,会改变mPosition
的有其中三个地方resetInternal()
,offsetPosition()
,bindViewHolder()
。 resetInternal()
首先排除 ,因为mPosition = NO_POSITION;
然后仔细查看offsetPosition()
和bindViewholder()
中的值发现,offsetPosition()
的值mPosition += offset;
会超出mPosition
的值的范围。 所以现在就要去找这个方法被调用的时机和offset
这个值的含义
- 查看
offsetPosition()
的调用,发现调用分别来自RecyclerView与RecyclerView.Recycler
两个的对应的insert
,move
和remove
方法,以及ViewHolder
的flagRemovedAndOffsetPosition(int, int, boolean)
的方法 主要看就下面这个
void offsetPositionRecordsForInsert(int positionStart, int itemCount) {//...//这里将itemCount 传递给了offsetPositionholder.offsetPosition(itemCount, false);//...mRecycler.offsetPositionRecordsForInsert(positionStart, itemCount);requestLayout();}
复制代码
看起来在某个刷新数据的地方理解错了itemCount
,找到我自己Adapter
代码里面的 notifyItemRangeInserted(positionStart,itemCount);
暂时修改为notifyDataSetChanged()
不会报错了
转载于:https://juejin.im/post/5a31ee3a6fb9a045132ab606
Inconsistency detected Invalid view holder adapter position相关推荐
- 解决IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter
解决IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter 最近项目已个要求,recyclervi ...
- java.lang.IndexOutOfBoundsExceptionInconsistency detected. Invalid view holder adapter position问题处理
工作中发现bugly上报了一个崩溃,日志如下: java.lang.IndexOutOfBoundsExceptionInconsistency detected. Invalid view hold ...
- Inconsistency detected. Invalid view holder adapter positionVH
recycleview报错,是因为我的list引用了静态变量的list,直接=了,应该是list.addAll(静态变量list)
- RecyclerView问题:java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adap
###写在前面 在使用RecyclerView中出现了一个问题,如下图 ###解决办法: 我们在使用RecycxlerView时,通常先回设置一个LayoutManager 我们的问题出现在Layou ...
- Recyclerview 出现 java.lang.IndexOutOfBoundsException: Inconsistency detected 异常
使用 RecyclerView 的时候报错 java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view hold ...
- RecyclerView的Inconsistency detected报错解决办法
最近在又一次遇到RecyclerView的Inconsistency detected报错后,研究了一下,终于清楚了问题所在,以及解决办法. 报错模拟: 先看一下报错日志 能看到最先的报错是Index ...
- pytorch view(): argument 'size' (position 1) must be tuple of ints, not Tensor
view(): argument 'size' (position 1) must be tuple of ints, not Tensor pytorch的view函数参数不能是tensor,解决方 ...
- Jboss集群异常WELD-000227: Bean identifier index inconsistency detected
wildfly9集群环境,集群启动后出现异常: WELD-000227: Beanidentifier index inconsistency detected - the distributed c ...
- 记一次全民K歌的crash定位过程
全民K歌4.6版本发布后,出现了一个与RecyclerView相关的IllegalArgumentException,作此记录. 一.问题 从下面堆栈中可以看出,RecyclerView此时正在执行布 ...
最新文章
- 反应式系统实现MQTT客户机
- 报名 | IBM苏中:从深蓝到AlphaGo,从大数据到认知商业
- 6.排序算法最优的时间复杂度
- OpenCV_轮廓的查找、表达、绘制、特性及匹配
- Appointment在SPRO里的date profile配置
- php提取汉字拼音首字母,php获取汉字拼音首字母的函数(真正可以使用的)
- [转载] Python之Numpy模块中的方法详解
- 普通交换机上的网卡绑定
- webpack 使用教程
- 草根学Python(十四) 一步一步了解正则表达式
- sql常识- UNIQUE
- Delphi Note
- 深度学习小笔记04-魏秀参《解析深度学习-卷积神经网络原理与视觉实践》
- 中国图形图象学报和计算机科学,《中国图象图形学报》编辑部
- 如何理解阿里月饼事件中各方的表现
- Ring buffer streaming in general - how to imple...
- 【JavaWeb】之Tomcat介绍、安装与使用
- 越来越觉得马克思主义原理非常深邃
- CISSP 考试知识要点总结
- MarioNETte: Few-shot Face Reenactment Preserving Identity of Unseen Targets(AAAI20)
热门文章
- linux nginx vue_Vue-CLI 3.x 部署项目至生产服务器
- php yii结果集合并,PHP 基础之数组合并
- eix安装_U盘安装原版Windows 8.1
- 如何不让tomcat在启动时弹窗_Tomcat 在 Spring Boot 中是如何启动的
- linux下如何运行脚本程序设计,Uboot 如何运行脚本
- 华为的mysql数据库如何登陆_怎么登陆mysql数据库
- w大师pdf转html转换器,W大师PDF转WORD
- 加拿大28历史开奖鸿蒙,本内特入选加拿大男篮集训名单,史上最水状元秀如今在何处?...
- python下载论文_Python实现一个论文下载器的过程
- php 删除 session 文件,如何删除php中的session文件