根据网上一些文章的总结,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,否则报错