来自android开发者(创建列表和卡片):
RecyclerView小部件是一个更高级和灵活的版本 列表视图。
好吧,这听起来很酷,但当我看到这张示例图片时,我真的很困惑这两者之间的区别。
上面的图片可以通过ListView使用自定义适配器轻松创建。
那么,在什么情况下应该使用RecyclerView呢?
来自android开发者(创建列表和卡片):
RecyclerView小部件是一个更高级和灵活的版本 列表视图。
好吧,这听起来很酷,但当我看到这张示例图片时,我真的很困惑这两者之间的区别。
上面的图片可以通过ListView使用自定义适配器轻松创建。
那么,在什么情况下应该使用RecyclerView呢?
当前回答
您可以使用接口来提供单击侦听器。我用这个 技术与ListViews。 无需分隔:只需在行中添加宽度为的视图 Match_parent和1dp的高度,并给它一个背景色。 简单地使用StateList选择器作为行背景。 addHeaderView也可以在ListViews中避免使用:只需将 视图外的标头。
所以,如果效率是你所关心的,那么是的,用RecyclerView替换ListView是个好主意。
其他回答
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,尽管你可能需要做更多的编码工作。
除了以上差异之外,还有以下几个:
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.
我用RecyclerView工作了一点,仍然喜欢ListView。
当然,它们都使用ViewHolders,所以这不是一个优势。 RecyclerView在编码方面更加困难。 RecyclerView不包含页眉和页脚,所以它是一个减号。 ListView不需要创建ViewHolder。如果你想要一个带有分段或子标题的列表,那么创建独立的项(没有ViewHolder)是个好主意,这样更容易,也不需要单独的类。
主要优势:
ViewHolder在ListView中默认是不可用的。我们将在getView()中显式地创建。 RecyclerView有内置的Viewholder。
以下是RecyclerView和ListView之间的几个关键点/区别。明智地接电话。
If ListView works for you, there is no reason to migrate. If you are writing a new UI, you might be better off with RecyclerView. RecylerView has inbuilt ViewHolder, doesn't need to implement our own like in listView. It support notify at particular index as well Things like animating the addition or removal of items are already implemented in the RecyclerView without you having to do anything We can associate a layout manager with a RecyclerView, this can be used for getting random views in recycleview while this was limitation in ListView In a ListView, the only type of view available is the vertical ListView. There is no official way to even implement a horizontal ListView. Now using a RecyclerView, we can have a i) LinearLayoutManager - which supports both vertical and horizontal lists, ii) StaggeredLayoutManager - which supports Pinterest like staggered lists, iii) GridLayoutManager - which supports displaying grids as seen in Gallery apps. And the best thing is that we can do all these dynamically as we want.