2015-05-26 6 views
6

Ich habe damit begonnen, diesen Absturz auf Crashlytics zu melden. Ich habe keine Ahnung, wie man es reproduziert, aber es scheint alles Code-intern zu sein RecyclerView. Ich denke das kommt von einem RecyclerView Ich habe was nie wirklich verändert. Der Benutzer kann es aktualisieren, aber dann werden alle Elemente ersetzt und notifyDataSetChanged wird aufgerufen.RecyclerView: java.lang.IndexOutOfBoundsException: Inkonsistenz erkannt. Ungültige Position

java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid item position 5(offset:5).state:7 
     at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4041) 
     at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:3999) 
     at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1892) 
     at android.support.v7.widget.GridLayoutManager.layoutChunk(GridLayoutManager.java:419) 
     at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1301) 
     at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:534) 
     at android.support.v7.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:156) 
     at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2365) 
     at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:2709) 
     at android.view.View.layout(View.java:15125) 
     at android.view.ViewGroup.layout(ViewGroup.java:4862) 
     at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1160) 
     at android.view.View.layout(View.java:15125) 
     at android.view.ViewGroup.layout(ViewGroup.java:4862) 
     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1888) 
     at android.widget.LinearLayout.layoutHorizontal(LinearLayout.java:1877) 
     at android.widget.LinearLayout.onLayout(LinearLayout.java:1653) 
     at android.view.View.layout(View.java:15125) 
     at android.view.ViewGroup.layout(ViewGroup.java:4862) 
     at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1160) 
     at android.view.View.layout(View.java:15125) 
     at android.view.ViewGroup.layout(ViewGroup.java:4862) 
     at android.widget.FrameLayout.layoutChildren(FrameLayout.java:515) 
     at android.widget.FrameLayout.onLayout(FrameLayout.java:450) 
     at android.view.View.layout(View.java:15125) 
     at android.view.ViewGroup.layout(ViewGroup.java:4862) 
     at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:907) 
     at android.view.View.layout(View.java:15125) 
     at android.view.ViewGroup.layout(ViewGroup.java:4862) 
     at android.widget.FrameLayout.layoutChildren(FrameLayout.java:515) 
     at android.widget.FrameLayout.onLayout(FrameLayout.java:450) 
     at android.view.View.layout(View.java:15125) 
     at android.view.ViewGroup.layout(ViewGroup.java:4862) 
     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1888) 
     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1742) 
     at android.widget.LinearLayout.onLayout(LinearLayout.java:1651) 
     at android.view.View.layout(View.java:15125) 
     at android.view.ViewGroup.layout(ViewGroup.java:4862) 
     at android.widget.FrameLayout.layoutChildren(FrameLayout.java:515) 
     at android.widget.FrameLayout.onLayout(FrameLayout.java:450) 
     at android.view.View.layout(View.java:15125) 
     at android.view.ViewGroup.layout(ViewGroup.java:4862) 
     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1888) 
     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1742) 
     at android.widget.LinearLayout.onLayout(LinearLayout.java:1651) 
     at android.view.View.layout(View.java:15125) 
     at android.view.ViewGroup.layout(ViewGroup.java:4862) 
     at android.widget.FrameLayout.layoutChildren(FrameLayout.java:515) 
     at android.widget.FrameLayout.onLayout(FrameLayout.java:450) 
     at android.view.View.layout(View.java:15125) 
     at android.view.ViewGroup.layout(ViewGroup.java:4862) 
     at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2325) 
     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2031) 
     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1191) 
     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6233) 
     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:788) 
     at android.view.Choreographer.doCallbacks(Choreographer.java:591) 
     at android.view.Choreographer.doFrame(Choreographer.java:560) 
     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:774) 
     at android.os.Handler.handleCallback(Handler.java:808) 
     at android.os.Handler.dispatchMessage(Handler.java:103) 
     at android.os.Looper.loop(Looper.java:193) 
     at android.app.ActivityThread.main(ActivityThread.java:5296) 
     at java.lang.reflect.Method.invokeNative(Method.java) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640) 
     at dalvik.system.NativeStart.main(NativeStart.java) 
+0

Wissen Sie, welche RecyclerView das verursacht? Wenn ja, bitte geben Sie den Adapter-Code dafür – Kelevandos

+0

Er bekam denselben Crash. http://stackoverflow.com/questions/26827222/how-to-change-contents-of-recyclerview-while-scrolling – wisemann

+0

Sie haben Recht, ich muss nicht richtig gesucht haben. Es begann gerade nach meinem 22.1 appcompat update, also vermute ich, dass es ein Fehler ist. – casolorz

Antwort

0

Erstellen Sie Ihre eigenen LinearLayoutManager.

CustomLinearLayoutManager.java

public class CustomLinearLayoutManager extends LinearLayoutManager { 

    @Override 
    public boolean supportsPredictiveItemAnimations() { 
     return false; 
    } 

    public CustomLinearLayoutManager(Context context) { 
     super(context); 
    } 

    public CustomLinearLayoutManager(Context context, int orientation, boolean reverseLayout) { 
     super(context, orientation, reverseLayout); 
    } 

    public CustomLinearLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 
     super(context, attrs, defStyleAttr, defStyleRes); 
    } 
} 

Wie CustomLinearLayoutManager auf RecyclerView einzustellen.

CustomLinearLayoutManager customLinearLayoutManager= new HPLinearLayoutManager(mContext); 
recyclerView.setLayoutManager(customLinearLayoutManager); 

Hoffe das wird Ihre Zeit sparen.

+0

Dies bewirkt, dass die Ansicht leer ist. –

3

Ich habe dasselbe Problem mit diesem Problem, ich bin sehr müde zu suchen und zu lösen. Aber ich habe eine Antwort gefunden, die gelöst werden muss, und Ausnahmen wurden nicht wieder rausgeworfen.

public class MyLinearLayoutManager extends LinearLayoutManager { 
    public MyLinearLayoutManager(Context context) { 
     super(context); 
    } 

    public MyLinearLayoutManager(Context context, int orientation, boolean reverseLayout) { 
     super(context, orientation, reverseLayout); 
    } 

    public MyLinearLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 
     super(context, attrs, defStyleAttr, defStyleRes); 
    } 

    @Override 
    public boolean supportsPredictiveItemAnimations() { 
     return false; 
    } 

    @Override 
    public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) { 
     //override this method and implement code as below 
     try { 
      super.onLayoutChildren(recycler, state); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } } 

Ich hoffe, dass diese Antwort Ihr Problem lösen wird.

Verwandte Themen