9

Tôi nhận được ngoại lệ này trong nhật ký của tôi -Android - java.lang.IndexOutOfBoundsException: Vị trí mục không hợp lệ 0 (0). Mục count: 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) 

Tôi nhận lỗi này trên dòng -

View view = recycler.getViewForPosition(position); 

Ở đây, trong phương pháp này LinearLayoutManager tùy chỉnh -

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

     } 
    } 

Trước đây, nó hoạt động tốt. Gần đây tôi đã thay đổi targetSdkVersion thành 23 (Marshmallow) và cũng như các phiên bản của lib hỗ trợ. Có thể là vấn đề là vì lý do tương tự.

Vui lòng hướng dẫn tôi cách khắc phục sự cố này.

+0

bạn đã sử dụng nơi nào đó 'notifyDataSetChanged'? –

+0

Không, tôi không sử dụng notifyDataSetChanged ở bất kỳ đâu. nhưng tôi đang gọi viewTreeObserver trên RecyclerView, – NarendraJi

+0

Nó sẽ bị ảnh hưởng nếu bạn sử dụng ['findViewByPosition'] (http://developer.android.com/intl/es/reference/android/support/v7/widget/LinearLayoutManager.html # findViewByPosition% 28int% 29) thay thế? –

Trả lời

10

Tôi gặp vấn đề tương tự và tôi tìm cách tốt hơn để giải quyết vấn đề.

gọi setAutoMeasureEnabled(false); trong hàm tạo của Trình quản lý bố cục tùy chỉnh của bạn.

+0

Điều này làm việc cho mi, bạn có biết tại sao nó hoạt động không? – D4rWiNS

+0

Sau khi cập nhật RecyclerView từ v7: 21.0.0 lên v7: 27.0.2, tôi phải đối mặt với vấn đề này. Bằng cách sử dụng các giải pháp đề xuất nó cuối cùng đã làm việc. Họ phải thay đổi beahavior mặc định của RecyclerView từ v7: 22. Cảm ơn bạn. – GiveEmTheBoot

2

Cuối cùng giải quyết :)

Thay

biên dịch 'com.android.support:recyclerview-v7:23.2.1'

để

biên dịch ' com.android.support:recyclerview-v7:22.+ '

đã hoạt động.

Không chắc chắn, đây có phải là giải pháp hoàn hảo hay không, nhưng nó có hiệu quả đối với tôi.

+1

Nó không hoạt động mà bạn cần để biên dịch với các công cụ xây dựng 23. – Oximer

Các vấn đề liên quan