5

This might look like a repeated question but it's not!

I get this rare crash on my RecyclerView

java.lang.IndexOutOfBoundsException: 
Inconsistency detected. 
Invalid item position 1(offset:1).state:4 at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5014).

I am pretty sure that I am not missing any notification to my adapter after data change!.

Apart from the crash, one thing I can't get my head around is that I am using android.support.v7.widget.RecyclerView and the crash is at line 5014 in that java file

CODE FROM RecyclerView.java where my crash was happening

 if (offsetPosition < 0 || offsetPosition >= mAdapter.getItemCount()) {
            throw new IndexOutOfBoundsException("Inconsistency detected. Invalid item "
                    + "position " + position + "(offset:" + offsetPosition + ")."
                    + "state:" + mState.getItemCount());
        }

so for this to crash either

offsetPosition < 0

or

offsetPosition >= mAdapter.getItemCount()

from the crash log clearly, my offsetPosition is 1 so

offsetPosition >= mAdapter.getItemCount()

has to be true!! but in my adapter, I implemented getItemCount like this

@Override
public int getItemCount() {
    return list.size() + 3;
}

so at least getItemCount should return 3 so 2nd statement also can't be true.

full crash log

java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid item position 1(offset:1).state:4
                                     at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5014)
                                     at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4970)
                                     at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2029)
                                     at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1414)
                                     at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1377)
                                     at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:578)
                                     at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3315)
                                     at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3124)
                                     at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3568)
                                     at android.view.View.layout(View.java:16651)
                                     at android.view.ViewGroup.layout(ViewGroup.java:5440)
                                     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743)
                                     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586)
                                     at android.widget.LinearLayout.onLayout(LinearLayout.java:1495)
                                     at android.view.View.layout(View.java:16651)
                                     at android.view.ViewGroup.layout(ViewGroup.java:5440)
                                     at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
                                     at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
                                     at android.view.View.layout(View.java:16651)
                                     at android.view.ViewGroup.layout(ViewGroup.java:5440)
                                     at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
                                     at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
                                     at android.view.View.layout(View.java:16651)
                                     at android.view.ViewGroup.layout(ViewGroup.java:5440)
                                     at android.support.design.widget.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:131)
                                     at android.support.design.widget.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:42)
                                     at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1364)
                                     at android.support.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:846)
                                     at android.view.View.layout(View.java:16651)
                                     at android.view.ViewGroup.layout(ViewGroup.java:5440)
                                     at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:1197)
                                     at android.view.View.layout(View.java:16651)
                                     at android.view.ViewGroup.layout(ViewGroup.java:5440)
                                     at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
                                     at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
                                     at android.view.View.layout(View.java:16651)
                                     at android.view.ViewGroup.layout(ViewGroup.java:5440)
                                     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743)
                                     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586)
                                     at android.widget.LinearLayout.onLayout(LinearLayout.java:1495)
                                     at android.view.View.layout(View.java:16651)
                                     at android.view.ViewGroup.layout(ViewGroup.java:5440)
                                     at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
                                     at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
                                     at android.view.View.layout(View.java:16651)
                                     at android.view.ViewGroup.layout(ViewGroup.java:5440)
                                     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743)
                                     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586)
                                     at android.widget.LinearLayout.onLayout(LinearLayout.java:1495)
                                     at android.view.View.layout(View.java:16651)
                                     at android.view.ViewGroup.layout(ViewGroup.java:5440)
                                     at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
                                     at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
                                     at com.android.internal.policy.PhoneWindow$DecorView.onLayout(PhoneWindow.java:2678)
                                     at android.view.View.layout(View.java:16651)
                                     at android.view.ViewGroup.layout(ViewGroup.java:5440)
                                     at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2183)
                                     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1943)

what am I missing here? please help!! thanks!.

kr15hna
  • 529
  • 1
  • 5
  • 12
  • did you change adapter data in back thread? – Shayan Pourvatan Apr 17 '17 at 11:34
  • Where are u initialising offsetPosition – vipin agrahari Apr 17 '17 at 11:37
  • @shayanpourvatan no, this adapter has its own shallow copy of array list. – kr15hna Apr 17 '17 at 11:39
  • @vipinagrahari that code snippet about offset is in framework's recyclerView class line 5014 ( my crash point from logs), I don't know anything about that offsetPosition variable or its purpose, but from logs clearly shows that my offestPosition value is '1'(Invalid item position 1(offset:1).state:4 ). so offsetPosition < 0 is false and offsetPosition >= mAdapter.getItemCount() is also false!! – kr15hna Apr 17 '17 at 11:44
  • did you get ViewHolder from layoutManager or recyclerView or other way in code, i mean for smarting update and other stuff. did this crash happened all time ? – Shayan Pourvatan Apr 17 '17 at 11:45
  • @shayanpourvatan sorry I didn't get your question, what is smarting update? I use LinearLayoutManager for recyclerView, also this crash is very very rare, – kr15hna Apr 17 '17 at 11:51
  • I mean something like http://stackoverflow.com/questions/33784369/recyclerview-get-view-at-particular-position – Shayan Pourvatan Apr 17 '17 at 11:52
  • Check to make sure the adapter in your recycler view is set to what you think it is (I'm guessing it either isn't set or is set to an instance that has an itemcount of 0). – C B J Apr 17 '17 at 11:55
  • @shayanpourvatan I am not using any, I don't have requirement like that – kr15hna Apr 17 '17 at 11:57
  • @CJames the only place I call setAdapter is in onCreate of my activity and I never called it again ( no setAdapter(null) or anything like that!), and my list is initiated (list = new ArrayList<>();) in adapter's constructor and never set to null, only operations like clear() and addAll() are called and notified immediately – kr15hna Apr 17 '17 at 12:01
  • Very mysterious. You say the crash is rare. Normally I would be looking for multi-threading issues when I see inconsistent (or rare) crashes. Does your app support screen rotation (that can also be a cause of mysterious crashes) – C B J Apr 18 '17 at 11:10
  • 3
    @CJames sorry for late reply, yes it was my mistake crash was due to a different adapter in different screen I blindly assumed that it was the adapter in the current screen. I apologize for this question to everyone . by the way how do I know which recyclerView is this from the crash log? is there anyway to find out its view id or something ? – kr15hna Apr 21 '17 at 08:53
  • @kr15hna you're a lifesaver! I've been trying to fix this for days and didn't even think it could have been a separate adapter causing the issue. Thanks! – Sam Liddle May 18 '17 at 11:07

0 Answers0