使用Recycler View的交错布局管理器崩溃

时间:2017-03-03 11:31:57

标签: android android-recyclerview staggered-gridview staggeredgridlayout

我正常加载回收器并正确显示数据。但是我要求在某种条件下重新创造我的活力。当我重新创建我的活动时,再次初始化Recycler视图并加载新的数据集。但是这次我遇到了崩溃。以下是日志。任何帮助都会非常感激.. !!!

Fatal Exception: java.lang.ArrayIndexOutOfBoundsException: start < 0 || end > len. start=-1, end=11, len=11
       at java.util.Arrays.checkStartAndEnd(Arrays.java:1732)
       at java.util.Arrays.fill(Arrays.java:803)
       at android.support.v7.widget.StaggeredGridLayoutManager$LazySpanLookup.invalidateAfter(StaggeredGridLayoutManager.java:2652)
       at android.support.v7.widget.StaggeredGridLayoutManager.handleUpdate(StaggeredGridLayoutManager.java:1496)
       at android.support.v7.widget.StaggeredGridLayoutManager.onItemsUpdated(StaggeredGridLayoutManager.java:1472)
       at android.support.v7.widget.RecyclerView$6.dispatchUpdate(RecyclerView.java:781)
       at android.support.v7.widget.RecyclerView$6.onDispatchFirstPass(RecyclerView.java:769)
       at android.support.v7.widget.AdapterHelper.dispatchFirstPassAndUpdateViewHolders(AdapterHelper.java:316)
       at android.support.v7.widget.AdapterHelper.dispatchAndUpdateViewHolders(AdapterHelper.java:302)
       at android.support.v7.widget.AdapterHelper.applyUpdate(AdapterHelper.java:222)
       at android.support.v7.widget.AdapterHelper.preProcess(AdapterHelper.java:106)
       at android.support.v7.widget.RecyclerView.consumePendingUpdateOperations(RecyclerView.java:1492)
       at android.support.v7.widget.RecyclerView.access$400(RecyclerView.java:151)
       at android.support.v7.widget.RecyclerView$1.run(RecyclerView.java:305)
       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
       at android.view.Choreographer.doCallbacks(Choreographer.java:670)
       at android.view.Choreographer.doFrame(Choreographer.java:603)
       at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
       at android.os.Handler.handleCallback(Handler.java:739)
       at android.os.Handler.dispatchMessage(Handler.java:95)
       at android.os.Looper.loop(Looper.java:148)
       at android.app.ActivityThread.main(ActivityThread.java:5417)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

2 个答案:

答案 0 :(得分:0)

就我而言,我正在尝试notifyItemChanged(Default_pos),其中Default_pos为-1,但不存在。

因此我得到了ArrayIndexOutOfBound。

答案 1 :(得分:0)

当您尝试重新创建activity时,RecyclerView仍在尝试显示view itemsComputingLayout

  

RecyclerView处于锁定状态,并且任何尝试更新适配器   内容将导致异常

<强>解决方案

  • 您应该使用处理程序推迟recreate activity
  • 在您触发更改之前,检查RecyclerView.isComputingLayout()应返回false。

For more details Check my answer