9

sto ottenendo questa eccezione nel mio ceppo -Android - java.lang.IndexOutOfBoundsException: posizione articolo non valida 0 (0). Numero di elementi: 0

java.lang.IndexOutOfBoundsException: Invalid item position 0(0). Item count:0 
      at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4622) 
      at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4617) 
      at com.jivemap.app.CustomizedViews.MyLinearLayoutManager.measureScrapChild(MyLinearLayoutManager.java:66) 
      at com.jivemap.app.CustomizedViews.MyLinearLayoutManager.onMeasure(MyLinearLayoutManager.java:30) 
      at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:2614) 
      at android.view.View.measure(View.java:15318) 
      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816) 
      at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1413) 
      at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1061) 
      at android.widget.LinearLayout.onMeasure(LinearLayout.java:599) 
      at android.view.View.measure(View.java:15318) 
      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816) 
      at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1413) 
      at android.widget.LinearLayout.measureVertical(LinearLayout.java:704) 
      at android.widget.LinearLayout.onMeasure(LinearLayout.java:597) 
      at android.view.View.measure(View.java:15318) 
      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816) 
      at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1413) 
      at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1061) 
      at android.widget.LinearLayout.onMeasure(LinearLayout.java:599) 
      at android.view.View.measure(View.java:15318) 
      at android.widget.ListView.setupChild(ListView.java:1849) 
      at android.widget.ListView.makeAndAddView(ListView.java:1764) 
      at android.widget.ListView.fillSpecific(ListView.java:1320) 
      at android.widget.ListView.layoutChildren(ListView.java:1635) 
      at android.widget.AbsListView.onLayout(AbsListView.java:2141) 
      at android.view.View.layout(View.java:13874) 
      at android.view.ViewGroup.layout(ViewGroup.java:4364) 
      at android.support.v4.widget.SwipeRefreshLayout.onLayout(SwipeRefreshLayout.java:596) 
      at android.view.View.layout(View.java:13874) 
      at android.view.ViewGroup.layout(ViewGroup.java:4364) 
      at android.support.v4.view.ViewPager.onLayout(ViewPager.java:1695) 
      at android.view.View.layout(View.java:13874) 
      at android.view.ViewGroup.layout(ViewGroup.java:4364) 
      at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1672) 
      at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1530) 
      at android.widget.LinearLayout.onLayout(LinearLayout.java:1443) 
      at android.view.View.layout(View.java:13874) 
      at android.view.ViewGroup.layout(ViewGroup.java:4364) 
      at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
      at android.view.View.layout(View.java:13874) 
      at android.view.ViewGroup.layout(ViewGroup.java:4364) 
      at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1672) 
      at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1530) 
      at android.widget.LinearLayout.onLayout(LinearLayout.java:1443) 
      at android.view.View.layout(View.java:13874) 
      at android.view.ViewGroup.layout(ViewGroup.java:4364) 
      at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
      at android.view.View.layout(View.java:13874) 
      at android.view.ViewGroup.layout(ViewGroup.java:4364) 
      at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1672) 
      at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1530) 
      at android.widget.LinearLayout.onLayout(LinearLayout.java:1443) 
      at android.view.View.layout(View.java:13874) 
      at android.view.ViewGroup.layout(ViewGroup.java:4364) 
      at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
      at android.view.View.layout(View.java:13874) 
      at android.view.ViewGroup.layout(ViewGroup.java:4364) 
      at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
      at android.view.View.layout(View.java:13874) 
      at android.view.ViewGroup.layout(ViewGroup.java:4364) 
      at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 

sto ottenendo questo errore sulla linea -

View view = recycler.getViewForPosition(position); 

Qui, in questo metodo di LinearLayoutManager personalizzata -

private void measureScrapChild(RecyclerView.Recycler recycler, int position, int widthSpec, 
            int heightSpec, int[] measuredDimension) { 



     View view = recycler.getViewForPosition(position); 
     if (view != null) { 
      RecyclerView.LayoutParams p = (RecyclerView.LayoutParams) view.getLayoutParams(); 
      int childWidthSpec = ViewGroup.getChildMeasureSpec(widthSpec, 
        getPaddingLeft() + getPaddingRight(), p.width); 
      int childHeightSpec = ViewGroup.getChildMeasureSpec(heightSpec, 
        getPaddingTop() + getPaddingBottom(), p.height); 
      view.measure(childWidthSpec, childHeightSpec); 
      measuredDimension[0] = view.getMeasuredWidth() + p.leftMargin + p.rightMargin; 
      measuredDimension[1] = view.getMeasuredHeight() + p.bottomMargin + p.topMargin; 
      recycler.recycleView(view); 

     } 
    } 

In precedenza, funzionava bene. Ho recentemente cambiato targetSdkVersion su 23 (Marshmallow) e anche sulle versioni di supporto lib. Potrebbe essere il problema è per la stessa ragione.

Per favore guidami, come risolvere questo problema.

+0

avete usato da qualche parte 'notifyDataSetChanged'? –

+0

No, non sto usando notifyDataSetChanged ovunque. ma sto chiamando viewTreeObserver su RecyclerView, – NarendraJi

+0

Sarà interessato se si utilizza ['findViewByPosition'] (http://developer.android.com/intl/es/reference/android/support/v7/widget/LinearLayoutManager.html # findViewByPosition% 28int% 29) invece? –

risposta

10

Ho riscontrato lo stesso problema e trovo un modo migliore per risolverlo.

chiamare setAutoMeasureEnabled(false); nel costruttore del proprio LayoutManager personalizzato.

+0

Questo ha funzionato per mi, sapevi perché funziona? – D4rWiNS

+0

Dopo aver aggiornato RecyclerView da v7: da 21.0.0 a v7: 27.0.2 ho affrontato questo problema. Utilizzando la soluzione proposta ha finalmente funzionato. Devono aver cambiato il comportamento predefinito di RecyclerView dalla v7: 22. Grazie. – GiveEmTheBoot

2

finalmente risolto :)

Sostituzione

compilazione 'com.android.support:recyclerview-v7:23.2.1'

a

compilazione ' com.android.support:recyclerview-v7:22.+ '

lavorato.

Non sono sicuro, questa è la soluzione perfetta o no, ma ha funzionato per me.

+1

Non funziona è necessario compilare con strumenti di costruzione 23. – Oximer

Problemi correlati