1. Overview
这是一篇翻译文章,自己作为android工程师以来,第一次翻译国外网站的文章,所以不免会有一些遗漏和错误。
RecyclerView 是一种新的ViewGroup,它的存在是为了像其他的viewGroup一样提供以adapter 为基础的view。它将成为ListView和GridView的继承者(这也是我翻译这篇文章的原因)。这个类是由support-v7提供的支持;之所以这么说的原因有:recyclerView 拥有更加可以拓展的framework,尤其是在它支持了实现水平和垂直的layout。当你的数据集会根据用户的action或者网络事件而进行change的时候要使用RecyclerView。
如果你想要使用RecyclerView,你需要进行下面的工作:
- . RecyclerView.Adapter-用于处理数据集和绑定它到一个view
- .LayoutManager- 用于定位items
- .ItemAnimator- 为通用的操作(如:增加和移除item)进行动画处理
另外,它为listView添加和删除添加的动画效果和现在目前的实现是完全不同的。RecyclerView也在开始加强ViewHolderPattern
这个动作目前是一个值得推荐的经验,而且现在已经深深的在新的framework中集成了。
更多的细节请看这个link:
1.1 与ListView 对比
RecyclerView 不同于它的父本ListView是因为一下的功能:
- . Required VIewHolder in Adapters- ListView adapters不要求使用ViewHolder模式去增加性能(一般开发者会用到viewHolder),相反,RecylcerView是被要求使用ViewHolder的。
- .Customizable Item Layouts –ListView 能够且只能够布局垂直Linear而且这个不能由用户定制。相反,RecyclerView因为拥有RecylerView.LayoutManger所以可以允许所有的itemlayouts包括水平list和staggeredgrids
- . easy item animations – listView 并不包含特别提供的产品来提供对于item增减时可以产生动画的内容。相反,RecyclerView拥有RecyclerView.ItemAnimator类来处理itemanimations
- .Manual Data Source Listview拥有类似与ArrayAdapterCursorAdapter等不同的Adapters用于处理arrays 和database结果集。相反,RecyclerView.Adapter要求用户实现来支持数据adapter。
- .Manual Item Decoration –ListView 拥有android:divider属性来快速的间隔list中的各item。相对的,RecyclerView要求使用RecyclerView。ItemDecoration对象来实现更多的手动的divider修饰。
- . Manual Click Detection –Listview 拥有一个AdapterView.OnItemClickListener接口来绑定按键事件。相应的,REcyclerVIew只支持RecyclerView.OnItemTouchListener,它将管理分散的touch事件,但是RecyclerView却没有创建好了的clickhanding。
2. RecyclerView 的组成
2.1 LayoutManagers
一个RecyclerView需要拥有一个layout Manager 和一个Adapter来进行实例化。一个layoutmanager 将itemviews插入到RecyclerView同时决定什么时候重用那些相当用户不在可见的itemviews。
RecyclerView 提供下面这些build-inlayout managers:
- LinearLayoutManager 显示在垂直和水平滚动的items
- GridLayoutManger 显示在grid中的items
- StaggerdGridLayoutManager 显示在staggered grid 中的items
在创建一个用户的layout manager,extend RecyclerView.LyaoutManager类.
这个link 里面是 Dave Smith’s talk 关于custom layout manager
2.2 RecyclerVIew.Adapter
RecyclerView 包含一个新品质的adapter。它类似于一个你已经使用过的adpter,但又具备了一些特殊的特征,例如,要求ViewHolder.你将必须override两个主要的方法:一个是inflate这个view和它的viewholder,另一个是bind 数据给这个view. 好消息是第一个方法只是在我们真的需要创建一个新view的时候。不需要检查它是否被回收了。
2.3 ItemAnimator
RecyclerView.ItemAnimator将使ViewGroup给adapter提醒的修改(如:增删选择)产生动画效果。DefaultItemAnimator将被用来作为基本的默认动画,而且有非常好的作用效果。可以看这个后面相关的section来获取更多的信息
3. Using the RecyclerView
使用一个RecyclerView 有以下几个关键的步骤:
1. 增加RecyclerView支持库到gradle build file
2. 定义一个modelclass 作为datasource
3. 添加一个RecyclerView给你的activity来显示这个items
4. 创建一个customrow layout XML 文件来可视化一个item
5. 创建一个RecyclerView.Adapter和ViewHolder 来提供给item