我们应该使用RecyclerView来replaceListView吗?

Android Docs说:

RecyclerView小部件是ListView的更高级和灵活的版本。 这个小部件是一个显示大型数据集的容器,通过维护有限数量的视图可以非常有效地滚动。 如果数据收集的元素在运行时基于用户操作或networking事件而更改,请使用RecyclerView小部件

实际上,如果效率不重要, ListView可以完成以上所有操作,而且我们在使用RecyclerViewreplaceListView时发现了很多问题:

  1. 没有onItemClickListener()列表项select – 解决scheme

  2. 列表项之间没有分隔符 – 解决scheme

  3. 没有内置的重叠select器,当你点击列表项 – 解决scheme时,没有视觉反馈

  4. 没有列表头的addHeaderView – 解决scheme

也许更多的问题…

所以当我们使用RecyclerViewreplaceListView ,我们必须做很多额外的编码才能达到与ListView相同的效果。

题:

  • 是否值得我们用RecyclerView完全替代ListView
  • 如果不是那么在这种情况下,我们应该更好地使用RecyclerView而不是ListView ,反之亦然?

感谢您的关注和任何想法!

如果ListView适合你,没有理由迁移。 如果您正在编写新的用户界面,那么使用RecyclerView可能会更好。

当您需要自定义列表或者想要更好的animation时,RecyclerViewfunction强大。 ListView中的这些便利方法给人们带来了很多麻烦,这就是为什么RecyclerView为他们提供了一个更加灵活的解决scheme。

您需要为迁移进行的主要更改是在您的适配器中。 如果您想继续调用notifyDataSetChanged ,则会失去大部分的animation和绑定优点。 但是,如果您可以更改您的适配器来分派详细的通知事件(添加/删除/移动/更新),那么你会得到更好的animation和性能。 这些事件让RecyclerViewselect正确的animation,并且还帮助它避免不必要的onBind调用。 如果您的项目视图很复杂,您将获得巨大的收益。 另外,未来,RecyclerView将会有更多的组件。

据我所知,如果ListView满足您的应用程序的所有当前需求,并满足所有的用例,那么就没有必要用RecyclerView代替它。

RecyclerView为开发者提供了巨大的动力,但却增加了开发者的复杂性。 有一些事情可以在ListView中轻松完成,现在可以花费很多不必要的努力。

但是,是的,有很多事情,一个ListView永远不能做,就像令人惊叹的LayoutManagerfunction,它可以让你dynamic地改变布局水平,垂直,网格,或交错网格无缝。

我在这里写了一个关于这个话题的详细答案。

1您可以使用界面来提供点击侦听器。 我也使用这种技术与ListViews。
2无分隔线:只需在行中添加宽度为match_parent ,高度为1dp的视图并为其指定背景色
3只需使用一个StateListselect器作为行背景。
在ListViews中也可以避免使用addHeaderView:只需将Header 放在 View的外面

所以,如果效率是你关心的话, 是的 ,用RecyclerView代替ListView是一个好主意。

唯一的情况是,当ListView还没有dynamic或者受到networking事件的影响时,仍然可以使用ListView。 例如:导航。

对于任何其他用途,RecyclerView日食列表视图。 因为RecyclerView只关心回收,所以在ListView中紧密耦合的视觉相关事物将变得更加容易,比如改变位置/重新排列,animation(其实它带有RecyclerView.ItemAnimator),自定义布局(除StaggeredGrid之外,还有StaggeredGrid旧的列表或网格样式,但也有这个库扩展它甚至更多)。

另外,如果你想使用CardView,我相信这是唯一的方法(一些很好的阅读时使用卡或列表)。

一个很好的select是使用BaseAdapter。 它支持使用Viewholder模式,而我的包含100多行位图和button,运行非常stream畅。