看了鸿洋大神关于Recyclerview这个控件的使用和解析之后,感触颇多,故结合自己的理解写下此篇博客,以备以后学习之用,本博文从Recyclerview控件的三个使用方面来进行介绍。
首先,什么是Recyclerview?Recycleview的作用是保证在手机屏幕有限的空间内完成大量数据的展示,比如我们熟悉的Listview和GridView均可实现此功能。那么为什么我们还需要Recyclerviewz这个控件呢?因为Recyclerview实现了高度的解耦,灵活性较强,而且通过设置layoutmanager就可以轻松实现并切换布局格式。
1.需要控制显示方式,就使用布局LayoutManager
2.控制item的间距(或者绘制分割线),请使用itemDecoration
3.如果需要添加item增删的动画,使用itemAnimator
4.点击,长按事件需要自己实现

1.Recyclerview实现Listview的效果

<1>首先在布局文件中写一个布局文件item_recyclerview来作为Recyclerview中item的布局,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout  xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">

<TextView
    android:id="@+id/text"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:background="#66ff0000"
    android:gravity="center"
    android:text="1"
    android:textSize="30dp" />

</FrameLayout >
<2>再写出Recyclerview的布局文件,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<android.support.v7.widget.RecyclerView
    android:id="@+id/Recycle_View"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>
</LinearLayout>
<3>创建RecyclerviewActivity,代码如下:
package blogtest.liupei.cn.recycleviewtest;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;

import java.util.ArrayList;
import java.util.List;


/**
 * Created by liupei on 2016/9/9.
 */
public class RecycleViewActivity extends AppCompatActivity {

    private RecyclerView mRecyclerView;
    private RecycleViewAdapter mAdapter;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_recycleview);
    mRecyclerView = (RecyclerView) findViewById(R.id.Recycle_View);

    initData();
}

public void initData() {
    List<String> Datas = new ArrayList<String>();

    for (int i = 0; i < 100; i++) {
        String data = i +"";
        Datas.add(data);
    }

    //创建线性布局管理器对象,使recycleview实现线性布局
    //LinearLayoutManager mlayoutmanager = new LinearLayoutManager(this);

    //创建gridview布局管理器,使recycleview实现网格布局
    GridLayoutManager mlayoutmanager = new GridLayoutManager(this,4);

    //设置为倒序即99-0
    //mlayoutmanager.setReverseLayout(true);
    //设置为水平滑动
    //mlayoutmanager.setOrientation(LinearLayoutManager.HORIZONTAL);

    mRecyclerView.setLayoutManager(mlayoutmanager);
    mAdapter = new RecycleViewAdapter(this, Datas);
    mAdapter.setOnItemClickListener(new RecycleViewAdapter.OnClickListener() {

        @Override
        public void onItemClick(View view, int position) {
            ToastUtils.setToast(RecycleViewActivity.this, "第" + position + "个item被点击了");
        }
    });
    mRecyclerView.setAdapter(mAdapter);
    mRecyclerView.addItemDecoration(new 
    }
}
initData()方法为自己创建一些虚拟数据,即初始化数据,供Recyclerview显示。RecycleViewAdapter为设配器对象,主要负责将数据显示在手机屏幕的每一个item上,代码如下:
package blogtest.liupei.cn.recycleviewtest;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.List;

/**
 * Created by liupei on 2016/9/9.
 */
public class RecycleViewAdapter extends RecyclerView.Adapter<RecycleViewAdapter.ItemViewHolder>{
private Context mContext;
private List<String> mDatas;
private View.OnClickListener onClickListener;

public RecycleViewAdapter(Context context,List<String> datas) {
    this.mContext = context;
    this.mDatas = datas;
}

public interface OnClickListener{
    void onItemClick(View view,int position);
}

private OnClickListener mOnItemClickLitener;

public void setOnItemClickListener(OnClickListener mOnItemClickLitener) {
    this.mOnItemClickLitener = mOnItemClickLitener;
}

@Override
public ItemViewHolder onCreateViewHolder(ViewGroup parent,int viewType) {
    //这里是创建条目的回调函数
    View view = LayoutInflater.from(mContext).inflate(R.layout.item_recycleview,parent,false);
    return new ItemViewHolder(view);
}

@Override
public void onBindViewHolder(final ItemViewHolder holder, final int position) {
    //这里是用于绑定数据
    String data = mDatas.get(position);
    holder.setData(data);

    if (mOnItemClickLitener != null)
    {
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mOnItemClickLitener.onItemClick(holder.itemView,position);
            }
        });

    }
}

@Override
public int getItemCount() {
    //这个方法用户设置条目的数量,返回值即为条目的数量
    if (mDatas != null) {
        return mDatas.size();
    }
    return 0;
}

public class ItemViewHolder extends RecyclerView.ViewHolder {

    private final TextView mText;

    public ItemViewHolder(View itemView) {
        super(itemView);
        mText = (TextView) itemView.findViewById(R.id.text);
    }

    public void setData(String data) {
        mText.setText(data);
        }
    }
}
recyclerview主要提供了三种方法供我们实现,onCreateViewHolder()创建条目的回调函数,根据条目的布局文件创建出view对象,并将view对象封装在一个内部类ItemViewHolder 对象中供缓存使用,提高了运行效率。onBindViewHolder()用于将对应条目的数据绑定在对应的条目上。getItemCount()获取条目的数量时使用。内部类ItemViewHolder将数据显示在textview控件上即可。

吃饭去了,吃完再更。