看了鸿洋大神关于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控件上即可。
吃饭去了,吃完再更。