我应该将应用程序中的现有Listview更改为RecyclerView吗?

时间:2014-09-14 05:50:11

标签: android listview android-5.0-lollipop android-recyclerview

将我的应用中的现有Listview转换为RecyclerView有什么好处? 我何时应该使用RecyclerView ??

3 个答案:

答案 0 :(得分:17)

这是一个难以回答的问题。首先:将RecyclerView视为AdapterViews的后继者,它带来了许多有用的改进,特别是在每个项目的动画领域。实际上这也是Docs所说的:

  

RecyclerView是ListView的一个更高级和灵活的版本。这个   widget是可以回收的大量视图的容器   滚动非常有效。如果有,请使用RecyclerView小部件   包含动态变化的元素的列表。

     

您还可以灵活地定义自定义布局管理器和   这个小部件的动画。

所以将来我们可能不会再使用ListViews了。此外,当您从列表中添加或删除项目时,RecyclerView不需要"notifyDataSetChanged()"之类的任何内容,这在性能上是一个巨大的改进。
如果您想通过说“更高级和更灵活的ListView版本”来了解Google的含义我建议您阅读此博客帖子A First Glance at Android’s RecyclerView

但要明确地回答你的问题:

将我的应用中的现有Listview转换为RecyclerView有什么好处吗?
是。正如已经说过的,RecyclerView更加灵活,并且免费提供便利的动画。 (关于自己这样做)

我应该何时使用RecyclerView?
ListView适合的地方也是RecyclerView。

还有一个问题:
是否需要从ListView切换到RecyclerView?
目前绝对没有!您必须考虑到此时RecyclerView不是最终的。因此,在不久的将来可能会有一些变化,错误修复和新功能。 (作为错误的示例:clipToPadding无法正常工作。幸运的是has been reported已经存在)

答案 1 :(得分:4)

我会尽力回答你的问题。

随着Android Lollipop的出现, RecyclerView 正式成功。 RecyclerView更强大,更灵活,是ListView 的主要增强功能。我会尽力给你一个详细的见解。

1)ViewHolder Pattern

在ListView中,建议使用ViewHolder模式,但它绝不是强制性的。对于RecyclerView,使用RecyclerView.ViewHolder类是必需的。这是ListView和RecyclerView之间的主要区别之一。

它使RecyclerView中的事情变得更复杂,但我们在ListView中遇到的许多问题都得到了有效解决。

<强> 判决

如果您已在ListViews中使用ViewHolder模式,则切换到RecyclerView将不会有任何更改。

2)LayoutManager

这是RecyclerView带来的另一项重大改进。在ListView中,唯一可用的视图类型是垂直ListView。甚至没有官方的方法来实现水平ListView。

现在使用RecyclerView,我们可以有一个

i)LinearLayoutManager - 支持垂直和水平列表,

ii)StaggeredLayoutManager - 支持Pinterest,如交错列表,

iii)GridLayoutManager - 支持显示在图库应用中看到的网格。

最棒的是我们可以根据需要动态完成所有这些操作。

<强> 判决

如果您的应用需要这种动态功能,那么我强烈建议您使用RecyclerView。还有其他方法可以做到这一点,但使用RecyclerView是最简单的方法。

3)物品动画师

ListViews缺乏对良好动画的支持,但RecyclerView为它带来了全新的维度。使用RecyclerView.ItemAnimator类,动画视图变得非常简单直观。

<强> 判决

我们也可以为ListView的项目制作动画,也不是那么困难,所以不是一个强有力的转换理由。

4)项目装饰

对于ListViews,动态装饰项目(如添加边框或分隔线)绝非易事。但是在RecyclerView的情况下,RecyclerView.ItemDecorator类可以为开发人员提供巨大的控制权,但会使事情变得更加耗时和复杂。

<强> 判决

我们也可以在ListView中执行此操作,如果您不需要在装饰中进行那么多自定义,那么ListView可以随身携带。

5)OnItemTouchListener

由于其AdapterView.OnItemClickListener界面,拦截ListView上的项目很简单。但是,RecyclerView通过RecyclerView.OnItemTouchListener为开发人员提供了更多的功能和控制,但它使开发人员的工作变得复杂。

<强> 判决

这是最不必要的&#34;之一#34;我在RecyclerView中找到的复杂事物,在ListViews的情况下更简单。

答案 2 :(得分:1)

RecyclerView 将是未来,它不仅仅是ListView2和 @reVeres的回答很好地解释了这个案例。

现在是检查文档并进行一些测试的时候了,但现在不是时候切换,因为RecyclerView是support-v21,你不能在生产版本中使用它。