twoway-view
twoway-view copied to clipboard
IndexOutOfBoundsException Invalid item position XX(XX). Item count:XX
java.lang.IndexOutOfBoundsException: Invalid item position 53(53). Item count:15
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:3263)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:3258)
at org.lucasr.twowayview.TwoWayLayoutManager.makeAndAddView(TwoWayLayoutManager.java:466)
at org.lucasr.twowayview.TwoWayLayoutManager.fillSpecific(TwoWayLayoutManager.java:279)
at org.lucasr.twowayview.TwoWayLayoutManager.onLayoutChildren(TwoWayLayoutManager.java:705)
at org.lucasr.twowayview.widget.BaseLayoutManager.onLayoutChildren(BaseLayoutManager.java:326)
at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:1918)
at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:2155)
at android.view.View.layout(View.java:14817)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:14817)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:14817)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:14817)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:14817)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.support.v7.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:502)
at android.view.View.layout(View.java:14817)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:14817)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
at android.view.View.layout(View.java:14817)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:14817)
at android.view.ViewGroup.layout(ViewGroup.java:4631)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1983)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1740)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:996)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5600)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
at android.view.Choreographer.doCallbacks(Choreographer.java:574)
at android.view.Choreographer.doFrame(Choreographer.java:544)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
I found solution to easy reproduce this issue: https://github.com/jacek-marchwicki/twoway-view/tree/bug2-reproducer Just please scroll down on the list.
also:
java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid item position 57(offset:57).state:95
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:3300)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:3258)
at org.lucasr.twowayview.TwoWayLayoutManager.makeAndAddView(TwoWayLayoutManager.java:469)
at org.lucasr.twowayview.TwoWayLayoutManager.fillAfter(TwoWayLayoutManager.java:269)
at org.lucasr.twowayview.TwoWayLayoutManager.fillGap(TwoWayLayoutManager.java:237)
at org.lucasr.twowayview.TwoWayLayoutManager.scrollBy(TwoWayLayoutManager.java:226)
at org.lucasr.twowayview.TwoWayLayoutManager.scrollVerticallyBy(TwoWayLayoutManager.java:783)
at android.support.v7.widget.RecyclerView$ViewFlinger.run(RecyclerView.java:2715)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
at android.view.Choreographer.doCallbacks(Choreographer.java:574)
at android.view.Choreographer.doFrame(Choreographer.java:543)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
For the first one I found simple solution:
diff --git a/core/src/main/java/org/lucasr/twowayview/TwoWayLayoutManager.java b/core/src/main/java/org/lucasr/twowa
index 543574c..81e5aea 100644
--- a/core/src/main/java/org/lucasr/twowayview/TwoWayLayoutManager.java
+++ b/core/src/main/java/org/lucasr/twowayview/TwoWayLayoutManager.java
@@ -275,6 +275,9 @@ public abstract class TwoWayLayoutManager extends LayoutManager {
if (state.getItemCount() == 0) {
return;
}
+ if (position >= state.getItemCount()) {
+ return;
+ }
makeAndAddView(position, Direction.END, recycler);
but I'm not sure if it is correct, @lucasr what do you think about this?
For the second I think this might be corelated with: https://code.google.com/p/android/issues/detail?id=77846
I've been seeing a similar issue, when I remove the first item in an adapter (position 0), and then call notifyItemRemoved(0). If I change it to notifyDataSetChanged() I have no problem, but with notifyItemRemoved(0) I get this crash:
java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid item position 0(offset:-1).state:2 at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:3300) at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:3258) at org.lucasr.twowayview.TwoWayLayoutManager.makeAndAddView(TwoWayLayoutManager.java:466) at org.lucasr.twowayview.TwoWayLayoutManager.fillBefore(TwoWayLayoutManager.java:256) at org.lucasr.twowayview.TwoWayLayoutManager.fillBefore(TwoWayLayoutManager.java:249) at org.lucasr.twowayview.TwoWayLayoutManager.correctTooHigh(TwoWayLayoutManager.java:335) at org.lucasr.twowayview.TwoWayLayoutManager.fillSpecific(TwoWayLayoutManager.java:301) at org.lucasr.twowayview.TwoWayLayoutManager.onLayoutChildren(TwoWayLayoutManager.java:725) at org.lucasr.twowayview.widget.BaseLayoutManager.onLayoutChildren(BaseLayoutManager.java:369) at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:1872) at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:2155) at android.view.View.layout(View.java:14937) at android.view.ViewGroup.layout(ViewGroup.java:4651) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) at android.widget.FrameLayout.onLayout(FrameLayout.java:388) at android.view.View.layout(View.java:14937) at android.view.ViewGroup.layout(ViewGroup.java:4651) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) at android.widget.FrameLayout.onLayout(FrameLayout.java:388) at android.view.View.layout(View.java:14937) at android.view.ViewGroup.layout(ViewGroup.java:4651) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) at android.widget.FrameLayout.onLayout(FrameLayout.java:388) at android.view.View.layout(View.java:14937) at android.view.ViewGroup.layout(ViewGroup.java:4651) at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:887) at android.view.View.layout(View.java:14937) at android.view.ViewGroup.layout(ViewGroup.java:4651) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) at android.widget.FrameLayout.onLayout(FrameLayout.java:388) at android.view.View.layout(View.java:14937) at android.view.ViewGroup.layout(ViewGroup.java:4651) at android.support.v7.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:502) at android.view.View.layout(View.java:14937) at android.view.ViewGroup.layout(ViewGroup.java:4651) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) at android.widget.FrameLayout.onLayout(FrameLayout.java:388) at android.view.View.layout(View.java:14937) at android.view.ViewGroup.layout(ViewGroup.java:4651) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525) at android.widget.LinearLayout.onLayout(LinearLayout.java:1434) at android.view.View.layout(View.java:14937) at android.view.ViewGroup.layout(ViewGroup.java:4651) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) at android.widget.FrameLayout.onLayout(FrameLayout.java:388) at android.view.View.layout(View.java:14937) at android.view.ViewGroup.layout(ViewGroup.java:4651) at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2132) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1872) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1075) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5878) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761) at android.view.Choreographer.doCallbacks(Choreographer.java:574) at android.view.Choreographer.doFrame(Choreographer.java:544) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:136)
I have this same issue, calling notifyItemRemoved(0) will crash, anyone knows if this is a recyclerview bug?
Now I am doing some dirty workaround like if (index == 0) {notifydatasetchange();} else {notifyItemRemoved(index)}
It is indeed a RecyclerView bug and is yet to be fixed.
For more information check: https://code.google.com/p/android/issues/detail?id=77846 https://code.google.com/p/android/issues/detail?id=77232
I have found the same issue, calling notifyItemRemoved(0) will crash with exception IndexOutOfBoundsException
Below exception arises when I was going to delete item at 0 postion in GridLayoutManager , StaggeredGridLayoutManager and SpannableGridLayoutManager.
Process: org.lucasr.twowayview.sample, PID: 21165 java.lang.ArrayIndexOutOfBoundsException: length=22; index=-1 at org.lucasr.twowayview.widget.ItemEntries.getItemEntry(ItemEntries.java:69) at org.lucasr.twowayview.widget.BaseLayoutManager.getItemEntryForPosition(BaseLayoutManager.java:213) at org.lucasr.twowayview.widget.SpannableGridLayoutManager.cacheChildLaneAndSpan(SpannableGridLayoutManager.java:216) at org.lucasr.twowayview.widget.BaseLayoutManager.measureChild(BaseLayoutManager.java:474) at org.lucasr.twowayview.TwoWayLayoutManager.setupChild(TwoWayLayoutManager.java:461) at org.lucasr.twowayview.TwoWayLayoutManager.fillFromScrapList(TwoWayLayoutManager.java:449) at org.lucasr.twowayview.TwoWayLayoutManager.onLayoutScrapList(TwoWayLayoutManager.java:740) at org.lucasr.twowayview.widget.BaseLayoutManager.onLayoutScrapList(BaseLayoutManager.java:375) at org.lucasr.twowayview.TwoWayLayoutManager.onLayoutChildren(TwoWayLayoutManager.java:727) at org.lucasr.twowayview.widget.BaseLayoutManager.onLayoutChildren(BaseLayoutManager.java:369) at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:1918) at android.support.v7.widget.RecyclerView.resumeRequestLayout(RecyclerView.java:1101) at android.support.v7.widget.RecyclerView$1.run(RecyclerView.java:155) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761) at android.view.Choreographer.doCallbacks(Choreographer.java:574) at android.view.Choreographer.doFrame(Choreographer.java:543) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5001) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) at dalvik.system.NativeStart.main(Native Method)
Still happening in @lucasr master, even with @jacek-marchwicki changes
I am using SpannableGridLayoutManager and notifyItemRangeRemoved(0, length).
This issue got fixed in Google's StaggeredGridLayoutManager in RecyclerView 21.0.2. (I could not reproduce anymore at least)
I tried to fix it, but no lucky =/