RecycerView
是 Design
包下的新控件,用来实现列表功能,相比原来的 ListView
和 GridView
要强大的多,并且有自动回收复用的机制,已经可以完全替代原先的列表控件了。
借助 LayoutManager
实现列表的展示方式,支持水平方向和垂直方向,支持列表、网格和瀑布流,支持自定义展示方式。
借助 ViewHolder
持有控件,用来回收和复用。
借助 ItemDecoration
为列表增加分割线,实际上是控制在每一项周边绘制不同的间隔。
借助 ItemAnimator
实现列表项更新动画。
借助 SnapHelper
可以实现类似 ViewPager
的效果。
借助 ItemTouchHelper
可以实现拖动、侧滑。
LayoutManager
在代码中设置 LayoutManager
,需要在设置 adapter
之前设置 LayoutManager
1 | RecyclerView.LayoutManager layoutManager = null; |
ViewHolder
继承 Recycler.ViewHolder
实现自定义 ViewHolder
这里只是实现简单的功能,旨在介绍了解 RecyclerView
的使用。
需要注意的一点是,RecyclerView
并没有实现 OnItemClickListener
事件,也就是我们无法直接获得 Item
的点击事件。
采用的方法是在最外层的父布局添加点击事件来模拟 Item
点击。getAdapterPosition();
函数获取当前 Item
在 Adapter
中的位置getLayoutPosition());
函数获得当前 Item
在布局中的位置
1 | class CustomViewHolder extends RecyclerView.ViewHolder { |
Adapter
继承 Recycler.Adapter
实现适配器,下面是一个基本的实现,在实际过程中通常会封装来简化 Adapter
,这里是我封装的一个类库,扩展了一些常用的功能 RecyclerView LightAdapter。
1 | class ContentAdapter extends RecyclerView.Adapter<CustomViewHolder> { |
数据更新
类似 ListView
的数据更新,但是开放了更多方法,支持局部更新,而不用更新整个列表。
1 | // 更新列表 |
分割线
RecyclerView
提供了插入分隔线的方法,但是是个抽象类,需要我们自己重写,并且没有实现好的默认分隔线。
1 | mReplyRv.addItemDecoration(new RecyclerView.ItemDecoration() { |
动画效果
RecyclerView
为数据的更新增加了动画效果,并且提供了一个默认的动画,我们可以通过实现 ItemAnimator
实现自己的动画效果。
1 | recyclerView.setItemAnimator(new DefaultItemAnimator()); |
ItemTouchHelper
1 | public class ItemTouchHelperWrap { |