来自 android 开发者(创建列表和卡片) :
回收视图小部件是一个更高级、更灵活的版本 列表视图。
好吧,这听起来很酷,但是当我看到这个示例图片时,我对这两者之间的区别感到非常困惑。
使用自定义适配器,ListView可以很容易地创建上面的图片。
ListView
那么,在什么情况下应该使用 RecyclerView呢?
RecyclerView
为了使列表视图具有良好的性能,您需要实现holder模式,这很容易搞砸,特别是当您想用几种不同类型的视图填充列表时。
RecyclerView烘焙了这个模式,使它更难以搞砸。它也更灵活,更容易处理不同的布局,不是直线,如网格。
RecyclerView是作为ListView的改进而创建的,所以是的,你可以用ListView控件创建一个附加列表,但使用RecyclerView更容易,因为它:
在ListView适配器中实现View Holder是可能的,但这是可选的,而在RecycleView中,这是写适配器的默认方式。
RecycleView
-这样你可以在运行时通过设置LayoutManager将列表项放在不同的容器中(linearLayout, gridLayout)。
LayoutManager
例子:
mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view); mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); //or mRecyclerView.setLayoutManager(new GridLayoutManager(this, 2));
ItemAnimator
还有更多关于RecyclerView,但我认为这几点是主要的。
因此,总结起来,RecyclerView是一个更灵活的控件,用于处理“列表数据”,它遵循关注的委托模式,只留给自己一个任务——回收项。
RecyclerView是一个新的ViewGroup,准备呈现任何 以类似的方式创建基于适配器的视图。它应该是 ListView and GridView的继承对象,它可以在 latest support-v7 version。RecyclerView已被开发 可扩展性,因此可以创建任何类型的 你能想到的布局,但也不能没有一点恼人的地方 剂量。< / p >
ListView and GridView
latest support-v7 version
答自安东尼奥·莱
compile 'com.android.support:recyclerview-v7:27.0.0'
RecyclerView确实是ListView的powerful view。 要了解更多详细信息,请访问这个页面
powerful view
ListView是RecyclerView的祖先。有很多事情ListView要么没有做,要么做得不好。如果你要收集ListView的缺点,并通过将问题抽象到不同的域来解决问题,你最终会得到类似于回收器视图的东西。下面是ListViews的主要问题点:
没有强制相同项目类型的View重用(看看ListView中使用的一个适配器,如果你研究getView方法,你会发现没有什么可以阻止程序员为每一行创建一个新视图,即使一个视图是通过convertView变量传入的)
View
convertView
没有阻止昂贵的findViewById的使用(即使你是回收上面提到的视图,开发人员也有可能调用findViewById来更新子视图的显示内容。ListViews中ViewHolder模式的主要目的是缓存findViewById调用。然而,这只有在你知道它的情况下才能使用,因为它根本不是平台的一部分)
findViewById
ListViews
ViewHolder
仅支持垂直滚动和行显示视图(回收器视图不关心视图放在哪里以及如何移动,它被抽象为LayoutManager。因此,Recycler可以支持如上所示的传统ListView,以及像GridView这样的东西,但它不限于此,它可以做更多的事情,但你必须做编程的基础工作来实现它)。
GridView
要添加/删除的动画不是考虑的用例。这完全取决于你如何去做这件事(比较RecyclerView。适配器类notify*方法提供v. ListViews来获得一个想法)。
简而言之,RecyclerView是ListView的一个更灵活的版本,尽管你可能需要做更多的编码工作。
主要优势:
ViewHolder在ListView中默认不可用。我们将在getView()中显式地创建。 RecyclerView内置了Viewholder.
getView()
Viewholder
getView
getItemCount
getTypeCount
我认为它们的主要和最大的区别是ListView在创建或放置项目时查找项目的位置,而另一方面RecyclerView查找项目的类型。如果有另一个具有相同类型的项被创建,RecyclerView不会再次创建它。它首先问adapter,然后问recycledpool,如果recycledpool说“是的,我已经创建了一个类似于它的类型”,那么RecyclerView不会尝试创建相同的类型。ListView没有这种池化机制。
以下是RecyclerView和amp之间的几个关键点/区别;列表视图。明智地接电话。
如果ListView适合你,就没有迁移的理由。如果你是 写一个新的UI,你可能会更好地使用RecyclerView RecylerView有内置的ViewHolder,不需要实现我们自己的 比如在listView中。它支持通知特定索引以及 像动画的添加或删除项目已经 在RecyclerView中实现,而不需要做任何事情 我们可以将布局管理器与RecyclerView关联,这可以是 用于在recycleview中获取随机视图,而这是限制 在ListView中,唯一可用的视图类型是 垂直列表视图。甚至没有正式的方法来实现 水平列表视图。现在使用RecyclerView,我们可以有一个 i) LinearLayoutManager -同时支持垂直和水平 ii) StaggeredLayoutManager -它支持Pinterest喜欢 交错列表,iii) GridLayoutManager -支持显示 最好的是我们可以动态地做这些事情。
i) LinearLayoutManager -同时支持垂直和水平 ii) StaggeredLayoutManager -它支持Pinterest喜欢 交错列表,iii) GridLayoutManager -支持显示
最好的是我们可以动态地做这些事情。
我使用了一些RecyclerView,仍然更喜欢ListView。
当然,它们都使用ViewHolders,所以这不是一个优势。
ViewHolders
RecyclerView在编码中更加困难。
RecyclerView不包含页眉和页脚,所以它是一个减号。
ListView不需要创建ViewHolder。如果你想要一个带有分段或子标题的列表,那么创建独立的项(没有ViewHolder)是个好主意,这样更容易,也不需要单独的类。
除了以上差异之外,还有以下几个:
RV分离视图创建和数据到视图的绑定。 在LV中,在将数据绑定到convertView之前,需要检查convertView是否为空以创建视图。 因此,在RV的情况下,视图只会在需要时创建,但在LV的情况下,可能会错过对convertview的检查,并且每次都会创建视图
现在使用LayoutManager在网格和列表之间切换更加容易。
不需要通知和更新所有项目,即使只有一个项目被更改。
非常容易的项目动画在RV的情况下。
所以,如果效率是你所关心的,那么是的,用RecyclerView替换ListView是个好主意。
简单的回答:在想要显示许多项,并且它们的数量是动态的情况下,应该使用RecyclerView。ListView应该只在项目数量总是相同并且受屏幕大小限制的情况下使用。
你会发现这很难,因为你只考虑Android库。
现在有很多选项可以帮助您构建自己的适配器,使您可以轻松地构建动态项目的列表和网格,您可以选择、重新排序、使用动画、分隔符、添加页脚、页眉等等。
不要害怕,给一个尝试RecyclerView,你可以开始喜欢它从一个ListView和一个RecyclerView中从网络下载的100个项目的列表,当你尝试滚动时,你会看到UX(用户体验)的差异,可能测试应用程序会在你甚至可以这样做之前停止。
我建议你检查这两个库来制作简单的适配器:
FastAdapter by mikepenz
FlexibleAdapter by davideas
RecyclerView相对于listview的优点:
默认包含ViewHolder。
简单的动画。
支持水平,网格和交错布局
listView相对于recyclerView的优点:
易于添加分隔线。
可以使用内置的arrayAdapter简单的普通列表
支持页眉和页脚。
支持OnItemClickListner。
RecyclerView信息
RecyclerView是由Android 5.0 (Lollipop)引入的。它包含在支持库中。因此,它与Android API Level 7兼容。
Android 5.0 (Lollipop)
与ListView类似,RecyclerView’s的主要思想是以一种性能友好的方式提供列表功能。这个视图名称中的“Recycler”部分并不是巧合。RecyclerView实际上可以回收当前正在使用的项。回收过程是通过一个名为观点持有者的模式完成的。
RecyclerView’s
优点,RecyclerView的缺点
优点:
缺点:
列表视图的信息
ListView在Android诞生之初就已经存在了。它甚至在API Level 1中可用,并且与RecyclerView具有相同的用途。
API Level 1
ListView的用法其实很简单。在这方面,它不像它的后继者。学习曲线比RecyclerView更平滑。因此,它更容易掌握。我们不需要处理LayoutManager, ItemAnimator或DiffUtil之类的东西。
优点,ListView的缺点
ExpandableListView
ListView和RecyclerView之间有很多区别,但你应该特别注意以下几点:
我只是想强调RecyclerView是兼容包的一部分。这意味着每个应用程序都有自己的RecyclerView实现,而不是使用来自操作系统的特性和代码。潜在地,类似RecyclerView的功能可以成为未来操作系统的一部分,从那里使用它是有益的。例如,Harmony OS很快就会发布。将来可以更改兼容性包许可证,这可能是一种暗示。缺点总结:
但值得注意的是,一些功能的实现,如滑动项目,来自RecyclerView。
以上所说的一切都必须加以考虑。