Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android - java.lang.IndexOutOfBoundsException: Invalid item position 0(0). Item count:0

I am getting this exception in my log -

 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)

I am getting this error on the line -

View view = recycler.getViewForPosition(position);

Here, in this method of custom 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);

        }
    }

Previously, it was working well. I recently changed the targetSdkVersion to 23 (Marshmallow), and as well as the versions of support lib. May be the issue is for the same reason.

Please guide me, how to fix this.

like image 992
Narendra Singh Avatar asked Apr 29 '16 08:04

Narendra Singh


2 Answers

I meet the same problem, and I find a better way to solve it.

call setAutoMeasureEnabled(false); in the constructor of your custom LayoutManager.

After API level 27 setAutoMeasureEnabled() is deprecated. So just override this method in your Custom LinearLayoutManager

@Override
public boolean isAutoMeasureEnabled() {
    return false;
}
like image 145
Nick2019 Avatar answered Nov 19 '22 03:11

Nick2019


Finally resolved :)

Replacing

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

to

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

worked.

Not Sure, this is perfect solution or not, but it worked for me.

like image 1
Narendra Singh Avatar answered Nov 19 '22 02:11

Narendra Singh