RecyclerView的简单使用

RecyclerView 是Android L版本中新添加的一个用来取代ListView的SDK,它的灵活性与可替代性比listview更好。接下来通过一系列的文章讲解如何使用RecyclerView,彻底抛弃ListView.
介绍:
RecyclerView与ListView原理是类似的:都是仅仅维护少量的View并且可以展示大量的数据集。RecyclerView用以下两种方式简化了数据的展示和处理:
使用LayoutManager来确定每一个item的排列方式。
为增加和删除项目提供默认的动画效果。
你也可以定义你自己的LayoutManager和添加删除动画,RecyclerView项目结构如下:
Adapter:使用RecyclerView之前,你需要一个继承自RecyclerView.Adapter的适配器,作用是将数据与每一个item的界面进行绑定。
LayoutManager:用来确定每一个item如何进行排列摆放,何时展示和隐藏。回收或重用一个View的时候,LayoutManager会向适配器请求新的数据来替换旧的数据,这种机制避免了创建过多的View和频繁的调用findViewById方法(与ListView原理类似)。

目前SDK中提供了三种自带的LayoutManager:
LinearLayoutManager
GridLayoutManager
StaggeredGridLayoutManager
简单来说,RecyclerView 作为一个新的sdk,它的可重构性要比ListView好的多,在以后的开发中可以大量使用。
下面简单说一下使用,
布局文件,简单几句:

<android.support.v7.widget.RecyclerView
        android:id="@+id/my_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="vertical" />

在布局文件中添加该控件之后,在代码中绑定:

mRecyclerView = (RecyclerView)findViewById(R.id.my_recycler_view);
//创建默认的线性LayoutManager
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);
//如果可以确定每个item的高度是固定的,设置这个选项可以提高性能
mRecyclerView.setHasFixedSize(true);
//创建并设置Adapter
mAdapter = new MyAdapter(getDummyDatas());
mRecyclerView.setAdapter(mAdapter);

之后便可以定义MyAdapter,从网上看到许多处理adapter的方法,挑一个比较好理解的来说吧:
MyAdapter继承RecyclerView.Adapter

@Override
public MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View view = minflater.inflate(R.layout.item_single_textview, viewGroup, false);
    MyViewHolder viewHolder = new MyViewHolder(view);
    return viewHolder;
    }

将数据与View绑定,并且可以处理一些动作(这里处理一个点击事件)

@Override
public void onBindViewHolder(MyViewHolder myViewHolder, final int i) {
    myViewHolder.tv.setText(mDatas.get(i));
    setItemEventClick(myViewHolder);
    }

定义setItemEventClick()方法

protected void setItemEventClick(final MyViewHolder myViewHolder) {
    if (mOnItemClickListener != null) {
    myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
                public void onClick(View view) {
                    int layoutPostion = myViewHolder.getLayoutPosition();
                    mOnItemClickListener.onItemClick(view, layoutPostion);
                }
            });

                    myViewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View view) {
                    int layoutPostion = myViewHolder.getLayoutPosition();
    mOnItemClickListener.onItemLongClick(view, layoutPostion);
                    return false;
                }
            });
        }
    }

自定义的ViewHolder,持有每个Item的的所有界面元素

class MyViewHolder extends RecyclerView.ViewHolder {
        TextView tv;

        public MyViewHolder(View itemView) {
            super(itemView);
            tv = (TextView) itemView.findViewById(R.id.id_tv);
        }
    }

写出点击事件的接口,由主页面来处理点击事件

private OnItemClickListener mOnItemClickListener;
public interface OnItemClickListener {
        void onItemClick(View view, int postion);

        void onItemLongClick(View view, int postion);
    }

public void setmOnItemClickListener(OnItemClickListener mOnItemClickListener) {
        this.mOnItemClickListener = mOnItemClickListener;
    }

以上就是RecyclerView的简单使用,并不是很复杂,在今后的项目中可以尽量多使用该SDK,减少对ListView的使用,可以灵活的控制界面,稍后上传一个对RecyclerView的小Demo加深理解

你可能感兴趣的:(android)