9

Я получаю это исключение в моем журнале -Android - java.lang.IndexOutOfBoundsException: Неверная позиция позиции 0 (0). Количество товара: 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) 

Я получаю эту ошибку на линии -

View view = recycler.getViewForPosition(position); 

Здесь, в этом методе пользовательского LinearLayoutManager -

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

     } 
    } 

Раньше он работал хорошо. Недавно я изменил targetSdkVersion на 23 (Marshmallow), а также версии поддержки lib. Возможно, проблема по той же причине.

Пожалуйста, помогите мне, как это исправить.

+0

Вы где-то использовали 'notifyDataSetChanged'? –

+0

Нет, я не использую notifyDataSetChanged где угодно. , но я вызываю viewTreeObserver на RecyclerView, – NarendraJi

+0

Будет ли это изменено, если вы используете ['findViewByPosition'] (http://developer.android.com/intl/es/reference/android/support/v7/widget/LinearLayoutManager.html # findViewByPosition% 28int% 29) вместо этого? –

ответ

10

Я встречаю ту же проблему, и я нахожу лучший способ ее решить.

вызов setAutoMeasureEnabled(false); в конструкторе вашего пользовательского LayoutManager.

+0

Это сработало для mi, знаете ли вы, почему оно работает? – D4rWiNS

+0

После обновления RecyclerView с версии 7: 21.0.0 до версии 7: 27.0.2 я столкнулся с этой проблемой. Используя предлагаемое решение, он, наконец, работал. Они, должно быть, изменили поведение beacavior по умолчанию RecyclerView с v7: 22. Спасибо. – GiveEmTheBoot

2

Наконец решена :)

Замена

компиляции 'com.android.support:recyclerview-v7:23.2.1'

в

компиляции ' com.android.support:recyclerview-v7:22.+ '

работал.

Не уверен, это идеальное решение или нет, но это сработало для меня.

+1

Это не сработает для компиляции со средствами сборки 23. – Oximer

Смежные вопросы