一.概述
RecyclerView是自Android 5.0之后,谷歌公司推出的控件。根据官方的介绍RecylerView是ListView的升级版。RecylerView是support-v7包中的新组件,是一个强大的滑动组件,与经典的ListView相比,同样拥有item回收复用的功能。因此,当我们使用RcyclerView控件的时候,需要导入support-v7包。
二.RecyclerView的特性:
1.RecylerView封装了viewholder的回收复用,也就是说RecylerView标准化了ViewHolder,编写Adapter面向的是不再是View ,而直接是ViewHolder,封装了逻辑,使用起来更加简单。
2.提供了一种插拔式的体验,高度的解耦,异常的灵活,扩展了对Item的控制。对于不同的列表展示效果我们可以通过布局管理器LayoutManager。例如:你想控制横向或者纵向滑动列表效果可以通过LinearLayoutManager这个类来进行控制(与GridView效果对应的是GridLayoutManager,与瀑布流对应的还有StaggeredGridLayoutManager等)。
3.你想要控制Item间的间隔(可绘制),通过ItemDecoration。你想要控制Item增删的动画,通过ItemAnimator。
三.通过菜单栏的方式展示列表:

首先我们需要明白的一点是使用RecylerView必须导入support-v7包:

第一步:ctrl+shift+alt+s:

Android recyclerview scrollbar属性解析 recyclerview scrollview_数据


Android recyclerview scrollbar属性解析 recyclerview scrollview_数据_02

第二步:

测试xml是否成功导入

Android recyclerview scrollbar属性解析 recyclerview scrollview_数据_03


第三步:

在 MainActivity中的代码:

首先实例化 mRecyclerView = (RecyclerView) findViewById(R.id.recycler_View);

1:加载一个菜单的布局和RecyclerView没有关系,方便RcyclerView各种效果的展示

Android recyclerview scrollbar属性解析 recyclerview scrollview_数据_04


menu布局:

<menu
 xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">

    <item android:id="@+id/action_list"
          android:orderInCategory="100"
          android:title="list显示"
          app:showAsAction="never"
        >

        <menu>
            <item
                android:id="@+id/action_list_noraml"
                android:orderInCategory="100"
                android:title="标准展示"
                app:showAsAction="never"
                />
            <item
                android:id="@+id/action_list_vertical_reverse"
                android:orderInCategory="100"
                android:title="垂直反向"
                app:showAsAction="never"
                />
            <item
                android:id="@+id/action_list_horizontal"
                android:orderInCategory="100"
                android:title="水平"
                app:showAsAction="never"
                />
            <item
                android:id="@+id/action_list_horizontal_reverse"
                android:orderInCategory="100"
                android:title="水平反向"
                app:showAsAction="never"
                />
        </menu>

    </item>

这里我们给菜单按钮做个监听:

Android recyclerview scrollbar属性解析 recyclerview scrollview_android_05


为了使代码具有简洁性,我们把要填充的数据做了个loadListData( );

Android recyclerview scrollbar属性解析 recyclerview scrollview_xml_06


自定义的Bean类:

// Bean类该有哪些类型, 根据RecyclerView的item需要哪些数据决定
public class DataBean {

    // 图片
    public int icon;
    // 文本
    public String name;
}

我们自定义的适配器:

// RecyclerView的适配器,注意要指定泛型,一般我们就是类名的viewholder继承viewHolder(内部已经实现了复用优化机制)
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ListViewHolder>{


    private Context mContext;
    // 泛型是RecyclerView所需的bean类
    private List<DataBean>mDataBeen;

    // 构造方法(一般用于初始化数据),一般需要接受两个参数,上下文,集合对象(包含了我们所需要的数据)
    public RecyclerViewAdapter(Context context, List<DataBean> dataBeen) {
        mContext = context;
        mDataBeen = dataBeen;
    }

    // 创建ViewHolder也就是创建出来一条ViewHolder(相当于listview中的item),并把viewHolder返回出去
    @Override
    public ListViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        // 转换一个view布局对象,决定了item的样子,参数:1.上下文  2.xml布局资源  3. 位null
        View itemView = View.inflate(mContext, R.layout.item_list, null);
        // 创建一个viewHolder对象
        ListViewHolder listViewHolder = new ListViewHolder(itemView);
        // 把 ViewHolder传出去
        return listViewHolder;
    }

    // 当ViewHolder和数据绑定时回调
    @Override
    public void onBindViewHolder(ListViewHolder holder, int position) {

        // 从集合里拿对应item的数据对象
        DataBean dataBean = mDataBeen.get(position);
        // 给holder里面的控件对象设置数据
        holder.setData(dataBean);
    }

    // 决定RecyclerView有多少条 item
    @Override
    public int getItemCount() {
        // 数据不为null,有几条就显示几条
        if (mDataBeen!=null &&mDataBeen.size()>0){
            return  mDataBeen.size();
        }
        return 0;
    }
    // 自动帮我们写的ViewHolder,参数:view布局对象
    public class ListViewHolder extends RecyclerView.ViewHolder{

        private final ImageView mIvIcon;
        private final TextView mTvName;

        public ListViewHolder(View itemView) {
            super(itemView);

            mIvIcon = (ImageView) itemView.findViewById(R.id.item_list_iv_icon);
            mTvName = (TextView)itemView.findViewById(R.id.item_list_tv_name);

        }

        public void setData(DataBean data) {
            // 给imageView设置图片数据
            mIvIcon.setImageResource(data.icon);
            // 给Textview设置文本数据
            mTvName.setText(data.name);
        }

    }
}

最后还是要展示一下效果:

Android recyclerview scrollbar属性解析 recyclerview scrollview_xml_07