RecyclerView IndexOutOfBoundsException 引出的RecyclerView 的使用方法总结

原创 2016年05月31日 10:19:57

在弹出框中使用RecyclerView 展示一个列表,其中弹出框的高度要随着列表数目的高度变化。

这个需求有两种解决方案:

1.自定义一个LinearLayoutManager ,动态修改RecyclerView 的布局高度

import android.content.Context;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;

/**
 * Created by lengqi on 2016/3/18.
 */
public class AutoHightLinearLayoutManager extends LinearLayoutManager {

    private int size;

    public AutoHightLinearLayoutManager(Context context, int sizeParam) {
        super(context);
        size = sizeParam;
    }

    @Override
    public void onMeasure(RecyclerView.Recycler recycler, RecyclerView.State state, int widthSpec, int heightSpec) {
      '''  int count = state.getItemCount();'''
       '''   if (count > 0) { ''' 
            View view = recycler.getViewForPosition(0);
            if (view != null) {
                measureChild(view, widthSpec, heightSpec);
                int measuredWidth = View.MeasureSpec.getSize(widthSpec);
                int measuredHeight = view.getMeasuredHeight();
                setMeasuredDimension(measuredWidth, measuredHeight * size);
            }
       '''   } else { ''' 
            '''  super.onMeasure(recycler, state, widthSpec, heightSpec); ''' 
         ''' } ''' 
    }
}

注意高亮代码,要判定这个itemCount,不然 recycler.getViewForPosition(0)就会报IndexOutOfBoundsException错误。

2. 使用StaggeredGridLayoutManager

new StaggeredGridLayoutManager(modeList.size(), StaggeredGridLayoutManager.HORIZONTAL)

int spanCount, int orientation

注意使用写法的顺序。在setAdapter之后。

  RecyclerView mModeView = (RecyclerView) window.findViewById(R.id.rv_speed_modes);

        modeAdapter = new ModeAdapter(modeList);
        mModeView.setAdapter(modeAdapter);
        modeAdapter.notifyDataSetChanged();
        mModeView.setLayoutManager(new StaggeredGridLayoutManager(modeList.size(), StaggeredGridLayoutManager.HORIZONTAL));
        mModeView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST));

Android getView中的position问题解决方案

1.注意ListView的android:layout_height属性值为"fill_paternt",如果为“wrap_content"将会是另一种情况 2.下面先讲讲我遇到的几...
  • cleverlzc
  • cleverlzc
  • 2014年11月09日 11:36
  • 6384

RecyclerView Bug:IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter的解决方案

RecyclerView是android-support-v7-21版本中新增的一个Widget,RecyclerView在刷新刷新数据的时候会出现以下异常: java.lang.IndexOutO...
  • lovexieyuan520
  • lovexieyuan520
  • 2016年01月18日 17:31
  • 19820

Recyclerview.getLayoutPosition()问题

使用Recyclerview 时,如果要添加item的点击监听等功能,可以在Recyclerview.Adapter的onBindViewHolder中设置 例如: @Override public...
  • trojx2
  • trojx2
  • 2016年02月22日 23:43
  • 8938

recycleView 遇到IndexOutOfBoundsException 及解决

事情是这样的  我在activity 中继承的MVPView,通过presenter加载输入,然后调用MVPview中的下面这个方法" @Override public void...
  • bluer1244
  • bluer1244
  • 2016年04月17日 16:55
  • 1269

Android中RecyclerView出现Bug:IndexOutOfBoundsException: Inconsistency detected. Invalid item position

出现的原因 RecyclerView使用的关键在于“动态”绑定了数据,通过LayoutManager来进行数据的相关界面展示。也就是说,如果我当前RecyclerView的数据 变化不当时会造成R...
  • qq_14902389
  • qq_14902389
  • 2016年10月08日 11:01
  • 685

RecyclerView 删除元素后,点击报 IndexOutOfBoundsException 解决方法

今天使用 RecyclerView ,删除某个元素后,再点击后面的元素,会奔溃: ...
  • u011240877
  • u011240877
  • 2016年11月29日 16:08
  • 2772

Android问题集-RecyclerView--java.lang.ArrayIndexOutOfBoundsException: length=12; index=-1

今天在写RecyclerView的Adapter时遇到一个异常:java.lang.ArrayIndexOutOfBoundsException: length=12; index=-1 。这个异常不...
  • vino111
  • vino111
  • 2017年03月14日 14:23
  • 1001

RecyclerView高度随Item自适应

在编写横向滑动列表的Demo时发现
  • guxiao1201
  • guxiao1201
  • 2014年10月24日 11:40
  • 57224

关于recyclerView上下滑动时的崩溃问题

昨天遇到一个神奇并且很难缠的bug…… RecyclerView上下滑动的时候崩溃,崩溃信息如下:java.lang.IndexOutOfBoundsException Inconsistency ...
  • W_LIN
  • W_LIN
  • 2016年11月03日 11:28
  • 1916

Android知识总结:ListView 出现IndexOutOfBoundsException异常

背景今天在整理友盟统计bug时,发现有几个bug集中在首页ListView的Adapter上,具体翻来,大概是说ListView中数据出现越界。具体错误日志大概如下: java.lang.IndexO...
  • lidec
  • lidec
  • 2016年03月31日 21:55
  • 9410
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:RecyclerView IndexOutOfBoundsException 引出的RecyclerView 的使用方法总结
举报原因:
原因补充:

(最多只允许输入30个字)