现在貌似还在使用ListView貌似就有点out了,最近在做项目的时候发现了还有RecyclerView和CardView结合使用的优雅做法,最后做出来效果:
添加依赖
1 | compile 'com.android.support:cardview-v7:23.1.1' |
每一个Item项CardView的布局
RecyclerView的用法和ListView大同小异,但有一点不同,RecyclerView强制使用ViewHolder,这是个保存控件的类,需要自己写,这个后面再说。现在先来说说RecyclerView的item项每一个CardView的实现。
XML:
1 | <android.support.v7.widget.CardView |
注意app:cardCornerRadius="5dp"
app:cardElevation="8dp"
app:cardBackgroundColor="#FFFFE0"
这几个CardView的属性分别表示卡片的圆角程度,卡片阴影,卡片背景颜色,写完后我们就可以开始实现Adapter了。
Adapter的实现
上面说了,必须要实现ViewHolder,这里面要放所有item项的类。Adapter要继承自RecyclerView.Adapter<BillViewAdapter.MyHolder>括号里是自己实现的在Adapter的ViewHolder内部类.BillAdapter就是这个适配器类的名字。如下:
1 | /** |
我们还是要准备数据源,context上下文,和LayoutInflater布局填充器,在Adapter的构造方法里就要全部实现。
1 | public BillViewAdapter(ArrayList<BillBean> beenList, Context context) |
接下来我们就要给Viewholder找当前布局文件了,不然去哪里绑定呢,在onCreateViewHolder方法里找到view
1 | public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) |
这个方法返回的ViewHolder就会马上被onBindViewHolder接到,由于在ViewHolder里已经绑定了,所以在这里只需要把数据源的数据取出来,把控件setview。
1 | @Override |
接下来@Override
public int getItemCount()
{
return beanList.size();
}
也不要忘记了,这是ListView中也会有的方法。到这里Adapter就已经大功告成了。
在Activity的使用
在Activity中需要三个对象
1 | private RecyclerView recyclerView; |
第三个变量就是Listview没有的,这个是布局管理器,你可以通过它设置水平布局还是垂直布局。这样设置
1 | recyclerView = (RecyclerView) findViewById(R.id.recycle_view); |
到这里我们的RecyclerView就设置完了,你还可以设置setItemAnimator
,addItemDecoration
来设置动画和分界线。