title: RecyclerView: Inconsistency detected. Invalid item position
body: <p>Our QA has detected a bug: when rotating the Android device (Droid Turbo), the following <strong>RecyclerView-related crash</strong> happened:</p>
  
  <blockquote>
    <p>java.lang.IndexOutOfBoundsException:
        Inconsistency detected. Invalid item position 2(offset:2).state:3</p>
  </blockquote>
  
  <p>To me, it looks like an internal error inside RecyclerView, as I can't think of any way of this being caused directly by our code...</p>
  
  <p>Has anyone encountered this problem?</p>
  
  <p>What would be the solution?</p>
  
  <p>A brutal workaround could be perhaps to catch the exception when it happens and re-create the RecyclverView instance from scratch, to avoid getting left with a corrupted state.</p>
  
  <p>But, if possible, I would like to understand the problem better (and perhaps fix it at its source), instead of masking it.</p>
  
  <p>The bug is not easy to reproduce, but it is fatal when it happens.</p>
  
  <p>The full stack-trace:</p>
  
  <pre><code>W/dalvikvm( 7546): threadid=1: thread exiting with uncaught exception (group=0x41987d40)
      E/AndroidRuntime( 7546): FATAL EXCEPTION: main
      E/AndroidRuntime( 7546): Process: com.oblong.mezzedroid, PID: 7546
      E/AndroidRuntime( 7546): java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid item position 2(offset:2).state:3
      E/AndroidRuntime( 7546):    at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:3382)
      E/AndroidRuntime( 7546):    at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:3340)
      E/AndroidRuntime( 7546):    at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1810)
      E/AndroidRuntime( 7546):    at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1306)
      E/AndroidRuntime( 7546):    at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1269)
      E/AndroidRuntime( 7546):    at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:523)
      E/AndroidRuntime( 7546):    at org.liboid.recycler_view.RecyclerViewContainer$LiLinearLayoutManager.onLayoutChildren(RecyclerViewContainer.java:179)
      E/AndroidRuntime( 7546):    at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:1942)
      E/AndroidRuntime( 7546):    at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:2237)
      E/AndroidRuntime( 7546):    at org.liboid.recycler_view.LiRecyclerView.onLayout(LiRecyclerView.java:30)
      E/AndroidRuntime( 7546):    at android.view.View.layout(View.java:14946)
      E/AndroidRuntime( 7546):    at android.view.ViewGroup.layout(ViewGroup.java:4651)
      E/AndroidRuntime( 7546):    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
      E/AndroidRuntime( 7546):    at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
      E/AndroidRuntime( 7546):    at android.view.View.layout(View.java:14946)
      E/AndroidRuntime( 7546):    at android.view.ViewGroup.layout(ViewGroup.java:4651)
      E/AndroidRuntime( 7546):    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
      E/AndroidRuntime( 7546):    at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
      E/AndroidRuntime( 7546):    at android.view.View.layout(View.java:14946)
      E/AndroidRuntime( 7546):    at android.view.ViewGroup.layout(ViewGroup.java:4651)
      E/AndroidRuntime( 7546):    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
      E/AndroidRuntime( 7546):    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
      E/AndroidRuntime( 7546):    at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
      E/AndroidRuntime( 7546):    at com.oblong.mezzedroid.workspace.content.bins.BinsContainerLayout.onLayout(BinsContainerLayout.java:22)
      E/AndroidRuntime( 7546):    at android.view.View.layout(View.java:14946)
      E/AndroidRuntime( 7546):    at android.view.ViewGroup.layout(ViewGroup.java:4651)
      E/AndroidRuntime( 7546):    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
      E/AndroidRuntime( 7546):    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
      E/AndroidRuntime( 7546):    at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
      E/AndroidRuntime( 7546):    at android.view.View.layout(View.java:14946)
      E/AndroidRuntime( 7546):    at android.view.ViewGroup.layout(ViewGroup.java:4651)
      E/AndroidRuntime( 7546):    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
      E/AndroidRuntime( 7546):    at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
      E/AndroidRuntime( 7546):    at android.view.View.layout(View.java:14946)
      E/AndroidRuntime( 7546):    at android.view.ViewGroup.layout(ViewGroup.java:4651)
      E/AndroidRuntime( 7546):    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
      E/AndroidRuntime( 7546):    at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
      E/AndroidRuntime( 7546):    at android.view.View.layout(View.java:14946)
      E/AndroidRuntime( 7546):    at android.view.ViewGroup.layout(ViewGroup.java:4651)
      E/AndroidRuntime( 7546):    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
      E/AndroidRuntime( 7546):    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
      E/AndroidRuntime( 7546):    at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
      E/AndroidRuntime( 7546):    at android.view.View.layout(View.java:14946)
      E/AndroidRuntime( 7546):    at android.view.ViewGroup.layout(ViewGroup.java:4651)
      E/AndroidRuntime( 7546):    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
      E/AndroidRuntime( 7546):    at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
      E/AndroidRuntime( 7546):    at android.view.View.layout(View.java:14946)
      E/AndroidRuntime( 7546):    at android.view.ViewGroup.layout(ViewGroup.java:4651)
      E/AndroidRuntime( 7546):    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
      E/AndroidRuntime( 7546):    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
      E/AndroidRuntime( 7546):    at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
      E/AndroidRuntime( 7546):    at android.view.View.layout(View.java:14946)
      E/AndroidRuntime( 7546):    at android.view.ViewGroup.layout(ViewGroup.java:4651)
      E/AndroidRuntime( 7546):    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
      E/AndroidRuntime( 7546):    at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
      E/AndroidRuntime( 7546):    at android.view.View.layout(View.java:14946)
      E/AndroidRuntime( 7546):    at android.view.ViewGroup.layout(ViewGroup.java:4651)
      E/AndroidRuntime( 7546):    at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2132)
      E/AndroidRuntime( 7546):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1872)
      E/AndroidRuntime( 7546):    at andro
  </code></pre>