在项目中遇到一个RecyclerView 偶现的奔溃,查看日志,发现是:

java.lang.IndexOutOfBoundsException: Index: 39, Size: 39

at java.util.LinkedList.checkElementIndex(LinkedList.java:555)

at java.util.LinkedList.get(LinkedList.java:476)

at android.support.v7.widget.RecyclerView.dispatchOnScrolled(RecyclerView.java:4844)

at android.support.v7.widget.RecyclerView.dispatchLayoutStep3(RecyclerView.java:3909)

at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3540)

at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:4082)

at android.view.View.layout(View.java:19781)

at android.view.ViewGroup.layout(ViewGroup.java:6144)

at android.support.v4.widget.SwipeRefreshLayout.onLayout(SwipeRefreshLayout.java:606)

at android.view.View.layout(View.java:19781)

at android.view.ViewGroup.layout(ViewGroup.java:6144)

at android.widget.FrameLayout.layoutChildren(FrameLayout.java:325)

at android.widget.FrameLayout.onLayout(FrameLayout.java:261)

at android.view.View.layout(View.java:19781)

at android.view.ViewGroup.layout(ViewGroup.java:6144)

at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1816)

at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1660)

at android.widget.LinearLayout.onLayout(LinearLayout.java:1569)

at android.view.View.layout(View.java:19781)

猜测原因是,RecyclerView的对于的数据被更改,比如,RecyclerView 当前的List 的size是39,然后,把这个List 删除了一部分,这个操作没有及时调用RecyclerView的notify造成了。

由于项目这个List修改的地方很多,很底层,目前使用临时的解决方案(网上其他方案都无法彻底catch这个异常,有这个烦恼的,请查看下面的代码),对异常进行try-catch 处理,具体代码如下:

public class LinearLayoutMgr extends LinearLayoutManager {
public LinearLayoutMgr(Context context) {
super(context);
} public LinearLayoutMgr(Context context, int orientation, boolean reverseLayout) {
super(context, orientation, reverseLayout);
} public LinearLayoutMgr(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
} @Override
public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
try {
super.onLayoutChildren(recycler, state);
} catch (Exception e) {
e.printStackTrace();
LogUtil.d("catch exception");
}
} @Override
public void scrollToPosition(int position) {
try {
super.scrollToPosition(position);
} catch (Exception e) {
e.printStackTrace();
LogUtil.d("catch exception");
}
}
}

在初始化RecyclerView 的时候,使用这个LinearLayoutMgr 代替系统的LinearLayoutManager即可

RecyclerView IndexOutOfBoundsException 问题的更多相关文章

  1. 滑动RecyclerView时出现异常: java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid item position 6(offset:6).state:30

    RecyclerView 存在的一个明显的 bug 一直没有修复: java.lang.IndexOutOfBoundsException: Inconsistency detected. Inval ...

  2. Android中RecyclerView出现java.lang.IndexOutOfBoundsException

    在RecyclerView更细数据时出现java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder ...

  3. Recyclerview 出现 java.lang.IndexOutOfBoundsException: Inconsistency detected 异常

    使用 RecyclerView 的时候报错 java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view hold ...

  4. RecyclerView Bug:IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter的解决方案(转)

    转自:RecyclerView Bug:IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter的解 ...

  5. Android之RecyclerView的原生Bug-Inconsistency detected. Invalid view holder adapter positionViewHolder{a1bbfa3 position=2 id=-1, oldPos=-1, pLpos:-1 no parent}

    今天在运行自己编写的App时,突然发现App在运行时闪退,然后就查看了Android Studio的Log,发现了这个错误,上网查了一下,才知道是RecyclerView的原生Bug,在数据更新时会出 ...

  6. RecyclerView解密篇(三)

    在上一篇(RecyclerView使用详解(二))文章中介绍了RecyclerView的多Item布局实现,接下来要来讲讲RecyclerView的Cursor实现,相较于之前的实现,Cursor有更 ...

  7. RecyclerView 介绍 02 – 重要概念

    几个概念 RecyclerView是一个ViewGroup: LayoutManager控制RecyclerView的ChildView的布局显示,childview由Recycler提供以及管理: ...

  8. RecyclerView和ScrollView嵌套使用

    我们的recyclerView有多个layoutmanager,通过重写layoutmanager的方法就可以让recyclerView和ScrollView嵌套了.但是请注意,如果recyclerV ...

  9. Android RecyclerView使用详解(三)

    在上一篇(RecyclerView使用详解(二))文章中介绍了RecyclerView的多Item布局实现,接下来要来讲讲RecyclerView的Cursor实现,相较于之前的实现,Cursor有更 ...

随机推荐

  1. AIMR 固定收益推荐读物

    目录 AIMR Suggested Fixed-Income Readings I. Perspectives on Interest Rates and Pricing of Traditional ...

  2. mysql 表复制(表备份)

    复制一个表数据到新表,我们可以直接执行下面的语句 create table new_table LIKE old_table:--将表结构复制到新表 insert into new_table sel ...

  3. vue 移动端,页面左右页面切换效果(切换过程中会出现白屏效果,布吉岛怎么优化,后来就发布前就弃用了)

    <transition name="left"> <router-view v-if="getCms" class="Router& ...

  4. [转] java获取hostIp和hostName

    [From] https://www.cnblogs.com/huluyisheng/p/6867370.html InetAddress的构造函数不是公开的(public),所以需要通过它提供的静态 ...

  5. J: Just for fun

    J: Just for fun 时间限制: 1 s      内存限制: 128 MB        题目描述 最近carryon在准备考研复习高数,复习到微分学的时候看到一个求曲面某点的切平面的问题 ...

  6. 【实战分享】安卓app测试的一些记录

    一.app代码未混淆1.使用7zip解压apk文件2.执行命令:dex2jar.bat apk解压后文件夹中的classes.dex文件3.上述命令执行后会在apk文件夹中生成java源码文件clas ...

  7. 用hashmap实现redis有什么问题

    1.容量问题 hashmap是有最大容量的 2.时效问题 redis可以持久化,也可以定时时间 hashmap不可以持久化 3.线程并发问题 hashmap不是线程安全的(并且:多线程同时调用hash ...

  8. 【lua】如何倒序查找字符

    现在有这样一个需求,有一个字符串,需要查找字符i最后出现的位置,不过相对于其他语言来说,Lua并没有提供这一操作,那么如何是好? 现在有这样几个方法: string.sub(str, i ,j) 功能 ...

  9. unity制作人物残影-绘制的方法

    这里是利用skinnedMeshRenderer原理做的 所以脚本需要挂在带这个组件的模型上 模型shader 必须要有个_Color参数属性,并且这个值可以调节颜色,会改变人物整体的透明度 [代码下 ...

  10. 更好的理解MVC

    mvc除了将数据层和逻辑层分离外,还有更好的优化了代码结构 m只和c交互,v也只和c交互,m与v的交互需要通过c,一共只用考虑4条路 如果不是这样的话,m v c需要考虑和每个人交互,那么就是要考虑 ...