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 ScrollView嵌套RecyclerView

之前ScrollView要嵌套ListView,方法很多,很多人都会使用重写ListView的onMeasure方法来实现,如下: @Override protected void onMeas...

ScrollView嵌套recyclerView问题

记得以前在解决scrollView与ListView嵌套问题时,那个时候是自定义了listView去测量listView高度,今天项目中刚好碰到了要用recycerView,同样也是嵌套在scroll...

RecyclerView里notifyItemRemoved的坑

RecyclerView很多时候是展示静态的数据,并不会有删除的操作,讲到RecyclerView时,会提到它提供了一个很好的展现删除操作动画的函数,代码片段一般是这样的 @Override ...

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

RecyclerView是android-support-v7-21版本中新增的一个Widget,RecyclerView在刷新刷新数据的时候会出现以下异常: java.lang.IndexOutO...

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

今天使用 RecyclerView ,删除某个元素后,再点击后面的元素,会奔溃: ...

Android Recyclerview使用方法

  • 2015-06-25 14:40
  • 5.99MB
  • 下载

RecyclerView的使用方法

  • 2016-05-31 22:15
  • 24.05MB
  • 下载

RecyclerView的使用方法

Android在Android L中推出了RecyclerView来代替ListView呈现列表类的数据,RecyclerView相比于ListView使用起来更加的灵活,可自定义的内容也更多。下面用...

RecyclerView使用方法,展示

  • 2017-10-10 18:34
  • 870KB
  • 下载

RecyclerView的使用方法

RecyclerView的使用方法RecyclerView是Android5.x以后新有的一个控件,可以简单的将其理解为ListView和GridView的一个升级。其具体的优势我就不说了,这里有前人...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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