从android开发人员(创建列表和卡片):
RecyclerView小部件是ListView的更高级,更灵活的版本。
好的,听起来很酷,但是当我看到此示例图片时,我对两者之间的区别感到非常困惑。
上面的图片可以ListView
使用自定义适配器轻松创建。
那么,在什么情况下应该使用RecyclerView
?
从android开发人员(创建列表和卡片):
RecyclerView小部件是ListView的更高级,更灵活的版本。
好的,听起来很酷,但是当我看到此示例图片时,我对两者之间的区别感到非常困惑。
上面的图片可以ListView
使用自定义适配器轻松创建。
那么,在什么情况下应该使用RecyclerView
?
Answers:
RecyclerView
是为了ListView
改进而创建的,因此可以,您可以创建带有ListView
控件的附件列表,但是使用起来RecyclerView
更容易,因为它:
在上/下滚动时重用单元格 -通过在ListView
适配器中实现View Holder可以实现此操作,但这是可选的,而RecycleView
这是编写适配器的默认方式。
将列表从其容器中解耦出来 -因此您可以在运行时通过set轻松将列表项放在不同的容器(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
是一种用于处理“列表数据”的更灵活的控件,该控件遵循关注委托的模式,而仅留给一项任务-回收项目。
为了使列表视图具有良好的性能,您需要实现holder模式,这很容易弄乱,尤其是当您想用几种不同类型的视图填充列表时。
RecyclerView烘焙了这种模式,使其更难弄乱。它也更加灵活,可以更轻松地处理非直线形的不同布局,例如网格。
ListView
是的祖先RecyclerView
。有很多事情ListView
没有做好,或者做得不好。如果您要收集的缺点ListView
并通过将问题抽象到不同的域来解决问题,则最终会遇到类似“回收者视图”的问题。这是ListViews的主要问题点:
没有View
对相同的项目类型强制使用Reuse(ListView
请参阅中使用的适配器之一,如果您研究getView方法,您将发现即使传递了一个,也不会阻止程序员为每一行创建一个新视图。通过convertView
变量)
未避免代价高昂的findViewById
用途(即使你被回收的意见,指出上面有可能对开发者进行调用findViewById
,以更新的子视图显示的内容。在的主要目的ViewHolder
格局ListViews
是缓存findViewById
的电话。然而,这只是如果您知道它,因为它根本不是平台的一部分,则可以使用)
仅支持带行显示视图的垂直滚动视图(Recycler视图不关心视图的位置和移动方式,它被抽象为LayoutManager
。因此,Recycler可以支持上述传统视图ListView
以及GridView
,但它不仅限于此,它还可以做更多,但您必须做一些编程工作才能实现它。
添加/删除的动画不是考虑的用例。完全由您决定如何解决(比较RecyclerView。Adapter类notify *方法提供的产品与ListViews以获得一个想法)。
简而言之,这RecyclerView
是更灵活的ListView
做法,尽管您可能需要进行更多的编码。
本
RecyclerView
是准备来呈现类似的方式任何基于适配器的视图中创建新的ViewGroup。它可以认为是它的继承者,可以在网上ListView and GridView
找到latest support-v7 version
。在RecyclerView
已经开发了可扩展性考虑,所以它可以创建任何类型的布局,你能想到的,但也不是没有一点疼痛的最屁股剂量。
compile 'com.android.support:recyclerview-v7:27.0.0'
RecyclerView
确实是一个powerful view
比ListView
。有关更多详细信息,请访问此页面。
以下是RecyclerView与ListView之间的几个关键点/差异。明智地接听电话。
如果ListView为您工作,则没有理由进行迁移。如果您正在编写新的UI,则使用RecyclerView可能会更好。
RecylerView具有内置的ViewHolder,不需要像listView那样实现我们自己的视图。它也支持在特定索引处通知
在RecyclerView中已经实现了诸如添加或删除项目动画之类的事情,而您无需执行任何操作
我们可以将布局管理器与RecyclerView关联,这可以用于在recycleview中获取随机视图,而这是ListView的限制。在ListView中,唯一可用的视图类型是垂直ListView。甚至没有实现水平ListView的官方方法。现在使用RecyclerView,我们可以
i)LinearLayoutManager-支持垂直列表和水平列表,ii)StaggeredLayoutManager-支持交错列表等Pinterest,iii)GridLayoutManager-支持显示在Gallery应用程序中看到的网格。
最好的是,我们可以根据需要动态地执行所有这些操作。
RecyclerView优于listview的优点:
默认情况下包含ViewHolder。
简单的动画。
支持水平,网格和交错布局
listView优于recyclerView的优点:
易于添加分隔线。
可以使用内置的arrayAdapter获得简单的普通列表
支持页眉和页脚。
支持OnItemClickListner。
recyclerView.addItemDecoration(new DividerItemDecoration(getContext(), LinearLayoutManager.VERTICAL));
在执行以下操作之后轻松地将分隔线添加到recyclerView:recyclerView = view.findViewById(R.id.feed);
1. ViewHolder模式
用于减少对findViewById()方法的调用的模式。
在ListView中,无需使用ViewHolder即可轻松构建列表。但不是RecyclerView。
2.适配器
它们都是AdapterViews,是的。它基于适配器类工作。
使用ArrayAdapter,CursorAdapter等默认适配器可以轻松构建ListView,但是RecyclerView提供了RecyclerView.Adapter类,以创建新的自定义适配器类。
您不能将ArrayAdapter或任何其他内置适配器与RecyclerView一起使用。
3.项目安排
我用更少的代码创建了Vertical ListView。但是,如果我们需要创建一个GridView怎么办?
RecyclerView使用LayoutManager安排其项目。有3个LayoutManager类。
动画制作
ListView缺少基本的动画。但是RecyclerView带有简单的动画。
分频器
该机器人:分频器和安卓dividerHeight属性或setDivider(),setDividerHeight()可以帮助您在ListView控件进行自定义分隔。
从25.1.0版本开始,您可以使用DividerItemDecoration类创建一个简单的分隔符。
点击事件
RecyclerView缺少OnItemClickListener,是的,这是非常可悲的。但是,它们通过提供RecyclerView.OnItemTouchListener,为开发人员提供了更多控制权。
通知方法
您需要调用适当的notify *方法来执行正确的动画。与ListView相比,RecylcerView有很多notify *方法。
我认为它们的主要和最大区别是,ListView
在创建或放置项目时会查找项目的位置,而另一方面则RecyclerView
是在查找项目的类型。如果创建了另一个具有相同类型的项目,RecyclerView
则不会再次创建该项目。它会先询问适配器,然后询问再循环池,如果再循环池说“是的,我已经创建了一个类似的类型”,那么RecyclerView
就不要尝试创建相同的类型。ListView
没有这种池化机制。
我工作了一段时间,RecyclerView
但仍然喜欢ListView
。
当然,他们两个都使用ViewHolders
,所以这不是优势。
A RecyclerView
在编码中比较困难。
A RecyclerView
不包含页眉和页脚,因此为负号。
一个ListView
不需要做出ViewHolder。如果您想拥有包含节或子标题的列表,则最好制作独立的项(不使用ViewHolder),它更容易且不需要单独的类。
因此,如果您关心效率,那是的,用RecyclerView替换ListView是个好主意。
简单的答案:您应该在想要显示很多项目且其数量是动态的情况下使用RecyclerView。仅当项目数始终相同且限于屏幕尺寸时,才应使用ListView。
您发现它变得更加困难,因为您只考虑了Android库。
如今,有许多选项可以帮助您构建自己的适配器,从而轻松构建动态项目的列表和网格,您可以选择,重新排序,使用动画,分隔线,添加页脚,页眉等。
别害怕,尝试一下RecyclerView,您可以开始喜欢它,在ListView和RecyclerView中列出从网上下载的100个项目的列表(例如facebook新闻),您会发现UX(用户)的区别体验),当您尝试滚动时,测试应用可能会停止,甚至无法执行。
我建议您检查这两个库以简化适配器:
回收者查看信息
与RecyclerView
一起引入Android 5.0 (Lollipop)
。它包含在支持库中。因此,它与Android API Level 7兼容。
与相似ListView
,RecyclerView’s
主要思想是以性能友好的方式提供列表功能。巧合的是,此视图名称的“回收者”部分不存在。该RecyclerView
实际上可以回收与它目前从事的项目。回收过程的完成归功于称为View Holder的模式。
RecyclerView的优点和缺点
优点:
缺点:
ListView信息
在ListView
从一开始的Android已经出现。即使在中也可以使用API Level 1
,它的用途与相同RecyclerView
。
ListView的用法实际上非常简单。在这方面,它不像其继任者。学习曲线比RecyclerView平滑。因此,更容易掌握。我们不必处理诸如LayoutManager,ItemAnimator或DiffUtil之类的问题。
ListView的优点和缺点
优点:
ExpandableListView
缺点: