RecyclerView基本概念
导语:
RecyclerView是Android 5.0提出的新UI控件,可以用来代替传统的ListView。
Bugly之前也发过一篇相关文章,讲解了 RecyclerView 与 ListView 在缓存机制上的一些区别:
Android ListView 与 RecyclerView 对比浅析--缓存机制
基本概念:
RecyclerView是Android 5.0提出的新UI控件,位于support-v7包中,可以通过在build.gradle中添加compile 'com.android.support:recyclerview-v7:24.2.1'
导入
为什么出现RecyclerView?
RecyclerView并不会完全替代ListView(这点从ListView没有被标记为@Deprecated可以看出),两者的使用场景不一样。但是RecyclerView的出现会让很多开源项目被废弃,例如横向滚动的ListView, 横向滚动的GridView, 瀑布流控件,因为RecyclerView能够实现所有这些功能。
比如有一个需求是屏幕竖着的时候的显示形式是ListView,屏幕横着的时候的显示形式是2列的GridView,此时如果用RecyclerView,则通过设置LayoutManager一行代码实现替换。
ListView & RecyclerView
1.addHeaderView(), addFooterView()
添加头视图和尾视图。
2.通过”android:divider”设置自定义分割线。
3.setOnItemClickListener()
和setOnItemLongClickListener()
设置点击事件和长按事件
这些功能在RecyclerView中都没有直接的接口,要自己实现(虽然实现起来很简单),因此如果只是实现简单的显示功能,ListView无疑更简单。
RecyclerView相比ListView,有一些明显的优点:
默认已经实现了View的复用,不需要类似if(convertView == null)
的实现,而且回收机制更加完善。
默认支持局部刷新。
容易实现添加item、删除item的动画效果。
容易实现拖拽、侧滑删除等功能。
RecyclerView是一个插件式的实现,对各个功能进行解耦,从而扩展性比较好。
标准用法:
RecyclerView的标准实现步骤如下:
创建Adapter:创建一个继承RecyclerView.Adapter<VH>
的Adapter类(VH是ViewHolder的类名),记为NormalAdapter。
创建ViewHolder:在NormalAdapter中创建一个继承RecyclerView.ViewHolder
的静态内部类,记为VH。ViewHolder的实现和ListView的ViewHolder实现几乎一样。
在NormalAdapter中实现:
VH onCreateViewHolder(ViewGroup parent, int viewType)
: 映射Item Layout Id,创建VH并返回。
void onBindViewHolder(VH holder, int position)
: 为holder设置指定数据。
int getItemCount()
: 返回Item的个数。
可以看出,RecyclerView将ListView中getView()
的功能拆分成了onCreateViewHolder()
和onBindViewHolder()
。