将我的应用中的现有Listview转换为RecyclerView有什么好处? 我何时应该使用RecyclerView ??
答案 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,你不能在生产版本中使用它。