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

时间:2015-04-03 02:46:37

标签: android listview android-recyclerview

自Android API 22正式版以来,

RecyclerView已添加到v7 support library。许多人说这是对ListView的增强,并且通过互联网发布了许多关于其使用的简要介绍。但这些文章中的大多数都非常简单,浅而空洞。增强功能只是RecyclerView.ViewHolderRecyclerView.ItemAnimatorRecylerView.SmoothScroller?滚动期间recycling and reuse mechanism项目的观看次数是否与ListView不同? enhancement RecyclerViewListView相比究竟是什么?

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

3 个答案:

答案 0 :(得分:13)

  

与ListView相比,RecyclerView的改进究竟是什么?

RecyclerView不是"增强" "超过ListView"严格来说。 ListView实际上做了一件事; RecyclerView本身并不是。更准确的比较是,RecyclerView 框架AdapterView有所改进,在某种程度上是AbsListView父类ListViewGridView

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

值得注意的是:

  • RecyclerView的可滚动空间内布置子项,将委派给管理员。因此,不仅三艘船具有recyclerview-v7(列表,网格,交错网格),而且可以开发其他场景用于替代场景(例如,重叠的子项,用于StackViewGallery排序经验)。

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

  • 其他被"烘焙到"与绘制分隔符一样,ListView现在被拉出到扩展点,例如ItemDecorator。现在,您可以选择如何装饰"物品,带有分隔线或盒子或彩色条形分隔物等等。装饰不仅限于"分隔符",但可以影响视图中的任何内容,由于某种原因,您认为它们与项目视图本身是分开的。

但是,

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

答案 1 :(得分:10)

根据官方文档RecyclerView是对ListView的重大改进。它包含许多新功能,例如ViewHolderItemDecoratorLayoutManagerSmoothScroller。但有一点肯定会让它优于ListView;在添加或删除项目时能够拥有动画。

查看持有人

  

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

     

通过使用RecylerView解决了这个问题   RecyclerView.ViewHolder课程。这是其中一个主要差异   RecyclerViewListView。实施RecyclerView此课程时   用于定义适配器使用的ViewHolder对象   将ViewHolder与一个位置绑定。这里要注意的另一点是   在为RecyclerView实现适配器时,提供一个   ViewHolder是强制性的。这使得实现有点   复杂,但解决了ListView中面临的问题。

布局管理器

  

在谈到ListView时,只有一种ListView可用   即垂直ListView。您无法实现ListView   水平滚动。我知道有办法实现横向   滚动,但请相信我,它不是那样设计的。

     

但现在,当我们查看Android RecyclerView vs ListView时,我们就有了   也支持水平收藏。实际上它支持   多种类型的清单。支持它使用的多种类型的列表   RecyclerView.LayoutManager课程。这是ListView的新功能   不具有。 RecyclerView支持三种类型的预定义布局   管理者:

     

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

项目动画师

  

列表中的动画是一个全新的维度,它具有无穷无尽的功能   可能性。在ListView中,没有特殊规定   通过它可以动画,添加或删除项目。代替   后来因为android evolved ViewPropertyAnimator被提出来了   谷歌的Chet Haase在此video tutorial中为ListView中的动画制作。   另一方面,比较Android RecyclerViewListView,它有   用于处理动画的RecyclerView.ItemAnimator课程。通过这个   可以为项目添加,删除和定义类自定义动画   移动事件。如果不这样做,它还会提供DefaultItemAnimator   需要任何自定义。

<强>适配器

  

ListView适配器很容易实现。他们有一个主要的方法   getView所有魔法曾经发生过。意见受到约束的地方   到一个位置。他们过去常常有一个有趣的方法   registerDataSetObserver人们可以在其中设置一个观察者   适配器。此功能也存在于RecyclerView中,但是   RecyclerView.AdapterDataObserver类用于它。但重点   支持ListView是它支持三种默认实现   适配器:ArrayAdapter
CursorAdapter
SimpleCursorAdapter
{而RecyclerView   适配器,具有ListView适配器除了之外的所有功能   内置支持DB游标和ArrayLists。在   RecyclerView.Adapter截至目前,我们必须进行自定义实施   向适配器提供数据。就像BaseAdapter一样   ListView秒。虽然您希望了解有关RecyclerView的更多信息   适配器实现,请参阅Android RecyclerView Example

项目装饰

  

要在ListView中显示自定义分隔线,可以轻松添加   ListView XML中的这些参数:
  android:divider="@android:color/transparent"   android:dividerHeight="5dp"
关于Android的有趣部分   RecyclerView就是这样,截至目前它并没有显示出分隔线   默认情况下的项目虽然谷歌的家伙一定是把它排除在外   为了定制,故意。但这大大增加了   开发人员的努力。如果您希望在项目之间添加分隔符,   您可能需要使用自定义实现   RecyclerView.ItemDecoration课程。或者您可以通过使用来应用黑客攻击   来自官方样本的此文件:DividerItemDecoration.java

答案 2 :(得分:1)

  
      
  1. 查看持有人

         

    RecylerView通过使用RecyclerView.ViewHolder类。这是一   RecyclerView和ListView的主要区别。什么时候   实现RecyclerView此类用于定义ViewHolder   适配器用于将ViewHolder与位置绑定的对象

  2.   
  3. 布局管理器

         

    也支持水平收藏。实际上它支持   多种类型的清单。支持它使用的多种类型的列表   RecyclerView.LayoutManager类。这是ListView的新功能   不具有。 RecyclerView支持三种类型的预定义布局   经理:LinearLayoutManager - 这是最常用的布局   在RecyclerView的情况下经理。通过这个,我们可以创造两者   水平和垂直滚动列表。 StaggeredGridLayoutManager -   通过这个布局管理器,我们可以创建交错列表。就像   Pinterest屏幕。 GridLayoutManager-这个布局管理器可以   用于显示网格,就像任何图片库一样。

  4.   
  5. 物品动画师

         

    RecyclerView具有RecyclerView.ItemAnimator类用于处理   动画。通过这个类可以定义自定义动画   项目添加,删除和移动事件。它还提供了一个   DefaultItemAnimator,以防您不需要任何自定义。

  6.   
  7. 适配器

         

    在RecyclerView.Adapter中,到目前为止我们必须进行自定义   实现向适配器提供数据。就像BaseAdapter一样   适用于ListViews。

  8.   

来源:http://www.truiton.com/2015/03/android-recyclerview-vs-listview-comparison/