与ListView相比,RecyclerView的增强功能是什么?

Sil*_*ght 12 android listview android-recyclerview

RecyclerView加入到v7 support library由于Android API 22日正式.许多人说它是一种增强功能,ListView并且通过互联网发布了很多关于它使用的简要介绍.但这些文章中的大多数都非常简单,浅而空洞.增强只是RecyclerView.ViewHolder,RecyclerView.ItemAnimatorRecylerView.SmoothScrollerrecycling and reuse mechanism滚动期间项目的观点是否与ListView's的不同?而究竟是什么enhancementRecyclerViewListView

任何答案,提示或链接都表示赞赏.提前致谢.

Com*_*are 13

什么是RecyclerView优于ListView的增强功能?

RecyclerViewListView严格来说,并非"增强""过度".ListView实际上做了些什么 RecyclerView,就其本身而言,没有.一个更准确的比较是,RecyclerView 框架是一个改进AdapterView,在某种程度上是AbsListView父类ListViewGridView.

RecyclerView专注于小部件回收和粗略的儿童View管理.它将其他所有内容委托给其他类.AdapterView做得少得多,使得功能扩展更加困难.

值得注意的是

  • 在可滚动空间内布置子项RecyclerView被委托给管理者.因此,不仅三艘船具有recyclerview-v7(列表,网格,交错网格),而且可以开发其他场景用于替代场景(例如,重叠儿童,用于某种体验StackViewGallery某种体验).

  • 从适配器更新可以更细粒度的.有了AdapterView,你几乎不得不重绘整个视图(例如,a ListView及其所有行)的重要性,特别是在添加和删除项目时.RecyclerView适配器中的更新机制指示更改的特定位置.这不仅需要较少的处理时间,而且还有助于启用动画效果RecyclerView(再次使用可插拔替换)来添加,移动和移除项目.

  • 其他被"烘焙"的东西ListView,比如绘制分隔线,现在被拉到延伸点,例如ItemDecorator.现在,您可以选择如何"装饰"项目,使用线条分隔线或方框或彩色条形分隔符等.装饰不仅限于"分隔符",但可以影响视图中的任何内容,由于某种原因,您认为与项目视图本身是分开的.

RecyclerView但是,开始相当复杂.你从ListView"开箱即用"获得的东西需要更多的代码 - 你的或第三方图书馆 - 来匹配.对于有经验的开发人员来说,这是一个功能,因为代码可以替换为其他代码.对于新手来说,这是一个错误,因为RecyclerView恕我直言的学习曲线更加陡峭.


Sil*_*ght 10

根据官方文档RecyclerView是一个重大改进ListView.它包含了许多新特性,如ViewHolder,ItemDecorator,LayoutManager,和SmoothScroller.但有一件事肯定会让它优先于ListView它; 在添加或删除项目时能够拥有动画.

查看持有人

ListView定义视图持有者时,建议的方法是保留视图的引用.但这并不是一种强迫.虽然没有这样做,但是ListView使用了show stale数据.不使用视图持有者的另一个主要缺点可能导致每次都通过id查找视图的繁重操作.这导致了滞后ListView.

RecylerView通过使用 RecyclerView.ViewHolder类解决了这个问题.这是在一个主要区别 RecyclerViewListView.实现RecyclerView此类时,用于定义ViewHolder适配器用于ViewHolder与位置绑定的对象.这里要注意的另一点是,在实现适配器时RecyclerView,提供 ViewHolder必须的.这使得实现有点复杂,但解决了所面临的问题ListView.

布局管理器

在谈到ListViews时,只有一种类型ListView可用,即垂直ListView.您无法ListView使用水平滚动实现.我知道有一些方法可以实现水平滚动,但请相信我的设计并非如此.

但是现在当我们看看Android RecyclerViewvs时ListView,我们也支持横向收藏.实际上它支持多种类型的列表.为了支持多种类型的列表,它使用了 RecyclerView.LayoutManager类.这是ListView没有的新功能.RecyclerView支持三种类型的预定义布局管理器:

LinearLayoutManager - 对于RecyclerView,这是最常用的布局管理器.通过这个,我们可以创建水平和垂直滚动列表.
StaggeredGridLayoutManager - 通过这个布局管理器,我们可以创建交错列表.就像Pinterest屏幕一样.
GridLayoutManager - 此布局管理器可用于显示网格,就像任何图片库一样.

物品动画师

列表中的动画是一个全新的维度,具有无限的可能性.在ListView中,没有特殊的规定可以通过它来动画,添加或删除项目.相反,后来作为Android演化的ViewPropertyAnimator被Google的Chet Haase在这个动画视频教程中提出ListView.另一方面,比较Android RecyclerViewvs ListView,它有 RecyclerView.ItemAnimator类来处理动画.通过此类,可以为项目添加,删除和移动事件定义自定义动画.此外,它还提供DefaultItemAnimator,以防您不需要任何自定义.

适配器

ListView适配器很容易实现.他们有一个主要的方法 getView,所有的魔法曾经发生过.意见被绑定到一个位置.此外,他们曾经有一个有趣的方法 registerDataSetObserver,其中一个可以在适配器中设置一个观察者.此功能也存在于RecyclerView中,但 使用了RecyclerView.AdapterDataObserver类.但支持ListView的一点是它支持三种默认的适配器实现:
ArrayAdapter
CursorAdapter
SimpleCursorAdapter
RecyclerView 适配器具有适配器具有的所有功能,ListView除了内置的DB游标和ArrayLists支持.在 RecyclerView.Adapter截至目前,我们必须做出一个自定义的实现来提供数据适配器.就像BaseAdapter为ListViews 做 的那样.虽然如果您想了解有关RecyclerView 适配器实现的更多信息,请参阅Android RecyclerView示例.

物品装饰

要在ListView中显示自定义分隔符,可以在ListView XML中轻松添加这些参数:
android:divider="@android:color/transparent" android:dividerHeight="5dp"
关于Android RecyclerView的有趣部分是,截至目前它默认情况下不显示项目之间的分隔符.虽然谷歌的家伙一定是故意将这个用于定制.但这大大增加了开发人员的工作量.如果您希望在项之间添加分隔符,则可能需要使用RecyclerView.ItemDecoration类进行自定义实现 .或者您可以通过使用官方样本中的此文件来应用hack:DividerItemDecoration.java