android - RecyclerView 相比 ListView 有什么增强?

标签 android listview android-recyclerview

RecyclerView自Android API 22正式加入v7支持库。并且很多人说它是对 ListView 的增强,并且在互联网上发布了许多关于它的用法的简要介绍。但这些文章大多非常简单、肤浅和空洞。增强功能只是 RecyclerView.ViewHolderRecyclerView.ItemAnimator 还是 RecylerView.SmoothScroller?滚动期间项目 View 的回收和重用机制是否与ListView不同? RecyclerView 相对于 ListView增强究竟是什么?

欢迎提供任何答案、提示或链接。提前致谢。

最佳答案

And what exactly is the enhancement of RecyclerView over ListView?

严格来说,

RecyclerView 不是“ListView”的“增强”。 ListView 实际上做了一些事情; RecyclerView 本身没有。更准确的比较是 RecyclerView framework 是对 AdapterView 的改进,并且在某种程度上是 AbsListView ListViewGridView 的父类。

RecyclerView 专注于 widget 回收和 gross child View 管理。它将其他一切委托(delegate)给其他类。 AdapterView 做的少得多,因此更难扩展功能。

注意事项:

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

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

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

不过,

RecyclerView 上手起来相当复杂。您从 ListView 中“开箱即用”获得的内容需要更多代码(您的或第三方库的)才能匹配。对于有经验的开发人员来说,这是一个功能,因为代码可以用其他代码替换。对于新手来说,这是一个错误,因为 RecyclerView 的学习曲线更陡峭,恕我直言。

关于android - RecyclerView 相比 ListView 有什么增强?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29425524/

相关文章:

android - 如何在 Android Studio 中调试 react-native

qt - QML:调整 ListView 页脚组件的大小以填充剩余空间

listview - Flutter:当 GestureDetector 中有一个 ListView 时,它显然没有收到 Drag 事件

android - 在 ListView 中滑动 getItem(position)

android - RecyclerView Cards - 打开新 Activity

java - ItemAnimator如何安排动画一个接一个地开始

android - RecyclerView 不尊重 height=wrap_content?

java - 参数化 xml 布局

android - Firebase 通知不适用于 Android O

c# - zxing条码扫描 fragment