前言:RecyclerView出现已经有一段时间了,我们肯定不陌生了,可以通过导入support-v7对其进行使用。
根据官方的文档,该控件用于在有限的窗口中展示大量数据集,其实有了它就可以替代ListView、GridView了。了解RecyclerView架构,可以高度的解耦,异常的灵活,通过设置它提供的不同LayoutManager,ItemDecoration , ItemAnimator可以实现的想要的效果。
1、首先介绍几种LayoutManager
LinearLayoutManager mManager = new LinearLayoutManager(mContent);
LinearLayoutManager mManager = new LinearLayoutManager(mContent, LinearLayoutManager.VERTICAL, false);//垂直布局,true表示左右翻转,false不翻转
GridLayoutManager mManager = new GridLayoutManager(mContent,3);
GridLayoutManager mManager = new GridLayoutManager(mContent,3,LinearLayoutManager.HORIZONTAL,false);//每行3列,水平,true表示左右翻转,false不翻转
mRecyclerView.setLayoutManager(mManager);
2、RecycleView简单使用
//初始化控件
mRecyclerView = findView(R.id.id_recyclerview);
//设置布局管理器
mManager = new LinearLayoutManager(mContent);
mRecyclerView.setLayoutManager(mManager);
//设置adapter
mRecyclerView.setAdapter(mAdapter)
//设置Item增加、移除动画
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
//添加分割线
mRecyclerView.addItemDecoration(new DividerItemDecoration(
getActivity(), DividerItemDecoration.HORIZONTAL_LIST));
3、接下来介绍的就是RecyclerView的适配器了,同样,RecyclerView和ListView,GridView一样需要adapter来填充数据,同样,自定义一个adapter需要继承RecyclerView.Adapter,代码需要实现几个父类方法onCreateViewHolder,onBindViewHolder,getItemCount(),根据名字就能知道:
(1)onCreateViewHolder:主要返回的是拿到布局,进而返回ViewHolder
return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.list_cell,null));
(2)onBindViewHolder:拿到ViewHolder中的控件对其赋值操作
(3)getItemCount():返回数组的size()
public class MyAdapter extends RecyclerView.Adapter {
class ViewHolder extends RecyclerView.ViewHolder {
TextView tvTitle,tvContent;
public ViewHolder(View itemView) {
super(itemView);
tvTitle = (TextView) itemView.findViewById(R.id.tv_title);
tvContent = (TextView) itemView.findViewById(R.id.tv_content);
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.list_cell,null));
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
ViewHolder vh = (ViewHolder) holder;
CellData cd = data[position];
vh.tvTitle.setText(cd.title);
vh.tvContent.setText(cd.content);
}
@Override
public int getItemCount() {
return data.length;
}
private CellData[] data = new CellData[]{new CellData("recycleview","学习recycleview"),new CellData("天气","今天天气不错"),new CellData("recycleview","学习recycleview"),new CellData("天气","今天天气不错"),new CellData("recycleview","学习recycleview"),new CellData("天气","今天天气不错"),new CellData("recycleview","学习recycleview"),new CellData("天气","今天天气不错"),new CellData("recycleview","学习recycleview"),new CellData("天气","今天天气不错"),new CellData("recycleview","学习recycleview"),new CellData("天气","今天天气不错"),new CellData("recycleview","学习recycleview"),new CellData("天气","今天天气不错"),new CellData("recycleview","学习recycleview"),new CellData("天气","今天天气不错"),new CellData("recycleview","学习recycleview"),new CellData("天气","今天天气不错"),new CellData("recycleview","学习recycleview"),new CellData("天气","今天天气不错"),new CellData("recycleview","学习recycleview"),new CellData("天气","今天天气不错"),new CellData("recycleview","学习recycleview"),new CellData("天气","今天天气不错"),new CellData("recycleview","学习recycleview"),new CellData("天气","今天天气不错"),new CellData("recycleview","学习recycleview"),new CellData(&#