Android初窥RecyclerView真容(一)


根据网上一些文章的总结,RecyclerView可以在功能上可以取代ListView,GridView,并且还拥有瀑布布局。在一些新型特效方面有着一定的优势,所以这次就来看看这个列表view到底是怎么写的。

首先是layout布局,十分简单,因为所有内容都是在其中实现的。

<android.support.v7.widget.RecyclerView

android:layout_width="match_parent"

android:layout_height="match_parent" />

接着就是适配器Adapter,与ListView继承BaseAdapter不同,它继承于RecyclerView.Adapter<.ViewHolder> 并且还要包含viewholder。例如adapter类取名MyRecyclerAdapter,那么就需要在其中申明一个viewholder,并且adapter继承于RecyclerView.Adapter<MyRecyclerAdapter.ViewHolder> 。

Viewholder声明方面,与ListView的Adapter并没有区别。

但是其中的方法与其有些不同

1.在onCreateViewHolder(ViewGroup parent, int viewType) 方法中声明布局

LayoutInflater inflater = LayoutInflater.from(parent.getContext());

View childView = null;

childView = inflater.inflate(R.layout.my_layout, parent, false);

MyViewHolder viewHolder = new MyViewHolder(childView);

return viewHolder;

2.在onBindViewHolder(AuthorViewHolder holder, int position) 方法中写入数据源

3.getItemCount()没有变化,获取数据总数

在设置完Adapter后,RecyclerView需要设置一个布局器,原始布局器有3种,LinearLayoutManager(线性布局效果) ,GridLayoutManager(网格布局效果) ,StaggeredGridLayoutManager(瀑布流布局效果)

举例LinearLayoutManager布局器:

LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);

linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);

mRecyclerView.setLayoutManager(linearLayoutManager);

即声明一个布局器,设置好方向,然后让布局使用它。

参考Github项目 AndroidSystemUiTraining

附上另外2种布局器的声明方法

//数字代表列数

GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 3);

gridLayoutManager.setOrientation(GridLayoutManager.HORIZONTAL);

StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);

备注:实际项目中需要在adapter中将自动生成的RecyclerView.ViewHolder 替换成自己的MyRecyclerAdapter.ViewHolder,否则报错