来自android开发者(创建列表和卡片):
RecyclerView小部件是一个更高级和灵活的版本 列表视图。
好吧,这听起来很酷,但当我看到这张示例图片时,我真的很困惑这两者之间的区别。
上面的图片可以通过ListView使用自定义适配器轻松创建。
那么,在什么情况下应该使用RecyclerView呢?
来自android开发者(创建列表和卡片):
RecyclerView小部件是一个更高级和灵活的版本 列表视图。
好吧,这听起来很酷,但当我看到这张示例图片时,我真的很困惑这两者之间的区别。
上面的图片可以通过ListView使用自定义适配器轻松创建。
那么,在什么情况下应该使用RecyclerView呢?
当前回答
我只是想强调RecyclerView是兼容包的一部分。这意味着每个应用程序都有自己的RecyclerView实现,而不是使用来自操作系统的特性和代码。潜在地,类似RecyclerView的功能可以成为未来操作系统的一部分,从那里使用它是有益的。例如,Harmony OS很快就会发布。将来可以更改兼容性包许可证,这可能是一种暗示。缺点总结:
许可 更大的足迹,尤其是作为许多应用程序的一部分 如果一些来自操作系统的功能可以存在,那么效率就会下降
但值得注意的是,一些功能的实现,如滑动项目,来自RecyclerView。
以上所说的一切都必须加以考虑。
其他回答
主要优势:
ViewHolder在ListView中默认是不可用的。我们将在getView()中显式地创建。 RecyclerView有内置的Viewholder。
您可以使用接口来提供单击侦听器。我用这个 技术与ListViews。 无需分隔:只需在行中添加宽度为的视图 Match_parent和1dp的高度,并给它一个背景色。 简单地使用StateList选择器作为行背景。 addHeaderView也可以在ListViews中避免使用:只需将 视图外的标头。
所以,如果效率是你所关心的,那么是的,用RecyclerView替换ListView是个好主意。
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是处理“列表数据”的一个更灵活的控件,它遵循关注点的委托模式,只留给自己一个任务——回收项目。
除了以上差异之外,还有以下几个:
RV separates view creation and binding of data to view. In LV, you need to check if convertView is null or not for creating view, before binding data to it. So, in case of RV, view will be created only when it is needed but in case of LV, one can miss the check for convertview and will create view everytime. Switching between Grid and List is more easy now with LayoutManager. No need to notify and update all items, even if only single item is changed. One had to implement view caching in case of LV. It is provided in RV by default. (There is difference between view caching n recycling.) Very easy item animations in case of RV.
I think the main and biggest difference they have is that ListView looks for the position of the item while creating or putting it, on the other hand RecyclerView looks for the type of the item. if there is another item created with the same type RecyclerView does not create it again. It asks first adapter and then asks to recycledpool, if recycled pool says "yeah I've created a type similar to it", then RecyclerView doesn't try to create same type. ListView doesn't have a this kind of pooling mechanism.