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

Android RecyclerView:IndexOutOfBoundsException:检测到不一致

石博艺
2023-03-14

我有一个问题,我在这里了解到错误已被修复,我应该确保我在主线程上插入数据并调用适当的通知。我这样做了,但我仍然得到这个异常。

onLoadFinisher方法(我正在使用加载器加载更多数据)

@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data)
{
    switch (loader.getId())
    {
        case UP_LOADER_ID:
            Log.d("Adapter", "Thread: "+Thread.currentThread().getName());
            days.put(firstDate, data);
            notifyItemRangeInserted(0, data.getCount()+1);
            loadingUp = false;
            break;

        case DOWN_LOADER_ID:
            days.put(lastDate, data);
            notifyItemRangeInserted(getItemCount(), data.getCount()+1);
            loadingDown = false;
            break;

        default:
            throw new IllegalArgumentException("Unknown loader id: " + loader.getId());
    }
}

日志

I/OpenGLRenderer: Initialized EGL, version 1.4
D/Adapter: Thread: main
D/Adapter: Thread: main
D/Adapter: Thread: main
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: net.antilopa, PID: 6406
                  java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionViewHolder{fa4fb40 position=42 id=-1497045600000, oldPos=21, pLpos:21 scrap [attachedScrap] tmpDetached not recyclable(1) no parent}
                      at android.support.v7.widget.RecyclerView$Recycler.validateViewHolderForOffsetPosition(RecyclerView.java:5220)
                      at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5402)
                      at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5363)
                      at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5359)
                      at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2141)
                      at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1525)
                      at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1488)
                      at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:585)
                      at android.support.v7.widget.RecyclerView.dispatchLayoutStep1(RecyclerView.java:3457)
                      at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3252)
                      at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3767)
                      at android.view.View.layout(View.java:16722)
                      at android.view.ViewGroup.layout(ViewGroup.java:5438)

共有1个答案

周苑博
2023-03-14

您可以用getItemCount()-1替换getItemCount(),因为getItemCount()返回计数数,但索引值为getitem计数()-1。

 case DOWN_LOADER_ID:
        days.put(lastDate, data);
        notifyItemRangeInserted(data.getCount()-1, data.getCount()+1);
        loadingDown = false;
        break;
 类似资料:
  • 我的应用程序中有回收器视图。UI类似于Google Play Store应用程序。它有两个视图寻呼机和项目的列表和网格以交替的方式。所有数据都是从web服务中提取的,并在两个API调用中被分叉。列表和网格的数据是从另一个API填充的。问题是,当我快速滚动recyclerview时,我会遇到这种崩溃。滚动recyclerview时,用于在列表/网格中加载数据的API调用来自。阅读了许多关于这个主题的

  • 我们的QA检测到了一个bug:当旋转Android设备(Droid Turbo)时,发生了以下与RecyclerView相关的崩溃: java.lang.IndexOutOfBoundsException:检测到不一致。无效的物料位置%2(偏移量:%2)。状态:%3 对我来说,这看起来像是RecyclerView内部的一个内部错误,因为我想不出这是由我们的代码直接导致的任何方式... 有人遇到过这

  • 致命异常:检测到java.lang.IndexOutOfBoundsException不一致。无效的物料位置5(偏移量:5)。状态:24 这种撞车的情况太多了!!! 我在布料上弄到的。 DateList是涉及RecyclerView片段: callToServer(带有假输入)首先清除键列表,然后填充它。几毫秒后,将调用callToServer(具有true输入)来再次清除keyList,并填充新

  • 日安。 我试着让我的电脑检测我的JDK,我想安装SDK管理器,对于eclipse,我的目标是运行一个虚拟的android设备。我已经安装了JDK,并设置了JAVA_HOME路径。下面是路径的一些片段。我目前正在运行Windows1064bit,没有找到任何链接到其他要做的事情。我已经找了一段时间了。 CMD错误消息 如果有人知道我做错了什么,请告诉我。

  • 运行颤振医生给我“cmdline-tools组件丢失”错误,尽管我在Android Studio安装了Android软件开发工具包命令行工具,但我也更新了它,确信它是最新版本。我已经寻找了几天的解决方案,我在任何地方都能找到的唯一答案是“只需在Android Studio软件开发工具包管理器中安装软件开发工具包命令行工具!”我显然已经这样做了,但它仍然不起作用。 下面的图片来指定 颤振医生错误 显

  • 我正在使用JUnit进行练习,这是我要测试的简单方法 无论如何,运行此测试将导致失败... 编辑:ok刚刚检查了一些“奇怪”的东西,这段代码实际上给了我一个例外: 不管怎么说,这一个: 给了我 这就是测试失败的原因。那么...如何在JUnit中测试这种行为呢?