当前位置: 首页 > 知识库问答 >
问题:

如何修复RecyclerView中的IndexOutOfBoundsException

甄伟兆
2023-03-14

我的应用程序中有一堆RecyclerViews,在Fabric中看到这个异常已经有一段时间了。

堆栈跟踪:

Fatal Exception: java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid item position 8(offset:8).state:11 android.support.v7.widget.RecyclerView{3914473e VFED.... ........ 0,0-1080,1509 #7f11017a app:id/chatlist_recycler_view}, adapter:com.myapp.application.a.c@134b699f, layout:android.support.v7.widget.LinearLayoutManager@1449aec, context:com.myapp.application.activities.HomeActivity@1fcf5f5e
   at android.support.v7.widget.RecyclerView$Recycler.clear(Unknown Source)
   at android.support.v7.widget.GapWorker.add(Unknown Source)
   at android.support.v7.widget.GapWorker.add(Unknown Source)
   at android.support.v7.widget.GapWorker.remove(Unknown Source)
   at android.support.v7.widget.GapWorker.add(Unknown Source)
   at android.support.v7.widget.GapWorker.run(Unknown Source)
   at android.os.Handler.handleCallback(Handler.java:739)
   at android.os.Handler.dispatchMessage(Handler.java:95)
   at android.os.Looper.loop(Looper.java:145)
   at android.app.ActivityThread.main(ActivityThread.java:5951)
   at java.lang.reflect.Method.invoke(Method.java)
   at java.lang.reflect.Method.invoke(Method.java:372)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195)

查看更新后的stacktrace,这似乎是我的chatlist_recycler_view的一个问题。

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">

  <android.support.v7.widget.RecyclerView
  android:id="@+id/chatlist_recycler_view"
  android:background="@android:color/white"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:isScrollContainer="false"/>

</RelativeLayout>

适配器代码可在此处找到:

https://pastebin.com/hzmkcdh5

共有1个答案

鲜于渊
2023-03-14

嗯,IndexOutOfBoundsException异常是一个常见的异常,但对于recyclerview,这里是您可以更改的以避免该异常。

1:分配布局适配器时,只需禁用预测动画

   mRecyclerView.setLayoutManager(new LinearLayoutManager(this){
     @Override
    public boolean supportsPredictiveItemAnimations() {
        return false;
    }
});

2:可以尝试清除现有的回收器池,然后在数据集较大的情况下通知数据更改。

mRecyclerView.getRecycledViewPool().clear();
mAdapter.notifyDataSetChanged();
swapAdapter(adapter, true)

5:请确保在启动时没有将RecolyerView滚动到某个位置。如果数据不一致,这也可能导致索引相关的问题。

链接:源

 类似资料:
  • 嗨,我是Java的初学者,我正在尝试编写这个程序,我可以在其中输入数字,但是当我输入“完成”时,我得到了我称为总计的值,numberInput。但是,当我运行它并输入“完成”时,我在线程“main”java.lang.NumberFormatException中得到异常:对于输入字符串:“完成”。你知道我如何修复这个问题吗? 这是我的代码: 谢谢你的帮助

  • 我在NestedScrollView中有一个RecyclerView。当recyclerView适配器列表较小时,它工作正常。但当列表太大时,它会使我的应用程序崩溃(或造成更多延迟)。我该怎么修呢。代码如下。 XML: 爪哇:

  • 问题内容: 我有一段代码为网格设置浏览器名称。但是,Selenium 4.0中不推荐使用DesiredCapabilities。如何修复此代码 ,使其与4.0中的代码相同? 问题答案: 根据记录,Selenium v​​4.x仍处于alpha阶段,尚未 发布以供生产使用的通用(GA)。 推荐用法 建议将继续使用Selenium v​​3.141.59,并使您的框架适应 DesiredCapabil

  • 问题内容: 运行RssReader的Android项目时出现错误。 码: 它显示以下错误: 如何解决此问题? 问题答案: 当应用程序尝试在其主线程上执行联网操作时,将引发此异常。在AsyncTask以下位置运行代码: 如何执行任务: 在MainActivity.java文件中,您可以在oncreate()方法中添加此行 不要忘记将其添加到AndroidManifest.xml文件中:

  • 问题内容: 应用程序通过使用jsf形式读取参数来发送字母。我不明白为什么以及如何解决它,因为当您在开发环境中运行时,一切正常。当我将应用程序放置在VPS服务器上时,会出现下一个错误堆栈(尽管该应用程序可以根据需要在本地主机上运行): 问题答案: 我创建并编译使用版本jdk_8u151和JRE的项目。那时,就像在服务器上一样,项目是在后来的jre下启动的。使用相同版本的jre解决了该问题。泰

  • 运行Java程序时,我收到一个错误。出了什么问题,我该怎么修复它?