2015-05-26 17 views
6

Ho iniziato a ricevere questo crash segnalato su Crashlytics. Non ho idea di come riprodurlo ma tutto sembra essere il codice interno allo RecyclerView. Penso che questo provenga da uno RecyclerView che non cambia mai veramente. L'utente può aggiornarlo ma tutti gli elementi vengono sostituiti e viene chiamato notifyDataSetChanged.RecyclerView: java.lang.IndexOutOfBoundsException: Rilevata incoerenza. Posizione articolo non valida

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

Sapete quale RecyclerView causa questo? Se è così, si prega di fornire il codice dell'adattatore per questo – Kelevandos

+0

Ha avuto lo stesso incidente. http://stackoverflow.com/questions/26827222/how-to-change-contents-of-recyclerview-while-scrolling – wisemann

+0

Hai ragione, non devo aver cercato a destra. Ha appena iniziato a succedere dopo il mio aggiornamento appcompat 22.1, quindi suppongo che sia un bug. – casolorz

risposta

0

Crea il tuo 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); 
    } 
} 

Come impostare CustomLinearLayoutManager su RecyclerView.

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

Spero che questo ti farà risparmiare tempo.

+0

Ciò fa sì che la vista sia vuota. –

3

Ho lo stesso problema con questo problema, sono molto stanco di cercare e risolverlo. Ma ho trovato la risposta da risolvere e le eccezioni non sono state buttate di nuovo.

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(); 
     } 
    } } 

Spero che questa risposta risolva il problema.

Problemi correlati