来自android开发者(创建列表和卡片):
RecyclerView小部件是一个更高级和灵活的版本 列表视图。
好吧,这听起来很酷,但当我看到这张示例图片时,我真的很困惑这两者之间的区别。
上面的图片可以通过ListView使用自定义适配器轻松创建。
那么,在什么情况下应该使用RecyclerView呢?
来自android开发者(创建列表和卡片):
RecyclerView小部件是一个更高级和灵活的版本 列表视图。
好吧,这听起来很酷,但当我看到这张示例图片时,我真的很困惑这两者之间的区别。
上面的图片可以通过ListView使用自定义适配器轻松创建。
那么,在什么情况下应该使用RecyclerView呢?
当前回答
ListView是RecyclerView的祖先。有很多事情ListView没有做,或者做得不好。如果您要收集ListView的缺点,并通过将问题抽象到不同的域来解决问题,那么您最终会得到类似于回收器视图的东西。下面是ListViews的主要问题点:
Didn't enforce View Reuse for same item types (look at one of the adapters that are used in a ListView, if you study the getView method you will see that nothing prevents a programmer from creating a new view for every row even if one is passed in via the convertView variable) Didn't prevent costly findViewById uses(Even if you were recycling views as noted above it was possible for devs to be calling findViewById to update the displayed contents of child views. The main purpose of the ViewHolder pattern in ListViews was to cache the findViewById calls. However this was only available if you knew about it as it wasn't part of the platform at all) Only supported Vertical Scrolling with Row displayed Views (Recycler view doesn't care about where views are placed and how they are moved, it's abstracted into a LayoutManager. A Recycler can therefore support the traditional ListView as shown above, as well as things like the GridView, but it isn't limited to that, it can do more, but you have to do the programming foot work to make it happen). Animations to added/removed was not a use case that was considered. It was completely up to you to figure out how go about this (compare the RecyclerView. Adapter classes notify* method offerings v. ListViews to get an idea).
简而言之,RecyclerView是一个更灵活的ListView,尽管你可能需要做更多的编码工作。
其他回答
为了使列表视图具有良好的性能,您需要实现holder模式,这很容易搞砸,特别是当您想用几种不同类型的视图填充列表时。
RecyclerView烘焙了这个模式,使它更难以搞砸。它也更灵活,更容易处理不同的布局,不是直线,如网格。
In my opinion RecyclerView was made to address the problem with the recycle pattern used in listviews because it was making developer's life more difficult. All the other you could handle more or less. For instance I use the same adapter for ListView and GridView it doesn't matter in both views the getView, getItemCount, getTypeCount is used so it's the same. RecyclerView isn't needed if ListView with ListAdapter or GridView with grid adapters is already working for you. If you have implemented correctly the ViewHolder pattern in your listviews then you won't see any big improvement over RecycleView.
RecyclerView信息
RecyclerView是在Android 5.0 (Lollipop)中引入的。它包含在支持库中。因此,它与Android API Level 7兼容。
与ListView类似,RecyclerView的主要思想是以一种性能友好的方式提供列表功能。这个视图名称中的“Recycler”部分并不是巧合。RecyclerView实际上可以回收它当前正在使用的项目。循环过程是通过一个名为View Holder的模式完成的。
RecyclerView的优点和缺点
优点:
集成的动画添加,更新和删除项目 通过使用ViewHolder模式强制循环视图 同时支持网格和列表 支持垂直和水平滚动 可以和DiffUtil一起使用吗
缺点:
增加了复杂性 没有OnItemClickListener
列表查看信息
ListView在Android诞生之初就已经存在了。它甚至可以在API级别1中使用,它与RecyclerView具有相同的用途。
ListView的用法其实很简单。在这方面,它不像它的后继者。学习曲线比RecyclerView更平滑。因此,它更容易掌握。我们不需要处理LayoutManager, ItemAnimator或DiffUtil之类的东西。
ListView的优点和缺点
优点:
简单的使用 默认的适配器 可用OnItemClickListener 它是expandabelistview的基础
缺点:
没有使用ViewHolder模式
RecyclerView被创建为一个ListView的改进,所以是的,你可以创建一个附加列表与ListView控件,但使用RecyclerView更容易,因为它:
在向上/向下滚动时重用单元格——这在ListView适配器中实现View Holder是可能的,但这是一个可选的事情,而在RecycleView中,这是默认的写适配器的方式。 解耦列表从它的容器-所以你可以很容易地把列表项在运行时在不同的容器(线性布局,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和GridView的继承者,它可以在 最新的support-v7版本。已经开发了RecyclerView 考虑到可扩展性,因此可以创建任何类型的 你能想到的布局,但也不能没有一点恼人的地方 剂量。
安东尼奥·莱瓦的回答
compile 'com.android.support:recyclerview-v7:27.0.0'
RecyclerView确实是一个比ListView强大的视图。 欲了解更多详情,请访问此页面。