【问题标题】:What's the enhancement of RecyclerView over ListView?RecyclerView 对 ListView 的增强是什么?
【发布时间】:2015-04-03 02:46:37
【问题描述】:

RecyclerView 从 Android API 22 正式添加到 v7 support library。许多人说它是对ListView 的增强,许多关于它的使用的简要介绍都发布在互联网上。但这些文章大多非常简单、肤浅和空洞。增强只是RecyclerView.ViewHolderRecyclerView.ItemAnimatorRecylerView.SmoothScroller?滚动期间项目视图的recycling and reuse mechanismListView 的视图是否不同?而RecyclerView 中的enhancement 到底是什么ListView

感谢任何答案、提示或链接。提前致谢。

【问题讨论】:

  • 你可以阅读This
  • 它不会从回收站视图中显示的元素中窃取您的注意力,这是肯定的。因此,您可以拥有可点击的元素,而无需使用它
  • 查看Post
  • “RecyclerView 已正式添加到 Android API 22 中”——不,不是。它是 Android 支持包的一部分,位于 recyclerview-v7 库中。它是与 Android 5.0(API 级别 21)一起引入的。

标签: android listview android-recyclerview


【解决方案1】:

RecyclerView 对 ListView 的增强究竟是什么?

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

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

注意:

  • RecyclerView 的可滚动空间内布置子代,委托给经理。因此,不仅有三个带有recyclerview-v7(列表、网格、交错网格),而且可以为替代场景开发其他的(例如,重叠的孩子,StackViewGallery 之类的体验)。

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

  • “烘焙到”ListView 中的其他内容(例如绘制分隔线)现在被拉出到扩展点中,例如 ItemDecorator。现在,您可以选择如何“装饰”项目,使用线分隔符或框或彩色条分隔符或其他任何东西。装饰不仅限于“分隔线”,还可以影响视图中的任何内容,由于某种原因,您认为与项目视图本身是分开的。

RecyclerView 但是,要开始使用相当复杂。你从ListView“开箱即用”得到的东西需要更多的代码——你的或第三方库的——来匹配。对于有经验的开发人员来说,这是一个特性,因为代码可以用其他代码替换。对于新手来说,这是一个错误,因为RecyclerView 的学习曲线更加陡峭,恕我直言。

【讨论】:

  • 不要忘记,现在我们可以访问真正的滚动值,而无需脏的工作区。
【解决方案2】:

根据官方文档,RecyclerView 是对ListView 的重大改进。它包含许多新功能,例如ViewHolderItemDecoratorLayoutManagerSmoothScroller。但肯定让它比ListView 更具优势的一件事是:添加或删除项目时具有动画的能力。

查看持有人

ListView 中,定义视图持有者是一种建议的方法 保留意见参考。但这不是强迫。虽然由 不这样做,ListView 使用了显示陈旧数据。另一个主要缺点 不使用视图持有者可能会导致繁重的查找操作 每次按 id 浏览。这导致了延迟 ListViews。

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

布局管理器

说到ListViews,只有一种ListView可用 即垂直ListView。你不能用 ListView 来实现 水平滚动。我知道有一些方法可以实现水平 滚动,但请相信我,它不是为那样工作而设计的。

但是现在当我们查看 Android RecyclerViewListView 时,我们有 也支持水平集合。事实上它支持 多种类型的列表。为了支持它使用的多种类型的列表 RecyclerView.LayoutManager 班级。这是 ListView 的新功能 不具有。 RecyclerView 支持三种预定义布局 经理:

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

物品动画师

列表中的动画是一个全新的维度,它有无穷无尽的 可能性。在ListView中,因此没有特殊规定 通过它可以对项目进行动画处理、添加或删除。反而 后来随着android进化ViewPropertyAnimator被建议 Google 的 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 一样 ListViews。虽然如果您想了解更多关于RecyclerView 适配器实现,请参考Android RecyclerView Example

物品装饰

要在 ListView 中显示自定义分隔线,可以轻松添加 ListView XML 中的这些参数:
android:divider="@android:color/transparent" android:dividerHeight="5dp"
关于Android的有趣部分 RecyclerView 是,到目前为止,它没有显示 默认情况下的项目。尽管谷歌的人一定忽略了这一点 有意定制。但这大大增加了 开发人员的努力。如果您想在项目之间添加分隔线, 您可能需要使用 RecyclerView.ItemDecoration 班级。或者您可以使用 此文件来自官方示例:DividerItemDecoration.java

【讨论】:

    【解决方案3】:
    1. 查看持有人

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

    2. 布局管理器

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

    3. 物品动画师

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

    4. 适配器

      到目前为止,在 RecyclerView.Adapter 中,我们必须自定义 实现向适配器提供数据。就像一个 BaseAdapter 对 ListViews 有效。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-01
      • 1970-01-01
      • 2020-12-20
      • 2015-04-04
      • 1970-01-01
      • 2011-02-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多