Android Recyclerview与ListView一起使用Viewholder

Mus*_*eel 142 performance android listview android-recyclerview

我最近遇到了RecycleViewAndroid 5.0发布的android ,它似乎RecycleView只是一个封装的传统ListView,其中包含了ViewHolder模式,它促进了视图的重用,而不是每次都创建它.

使用的其他好处是RecycleView什么?如果两者在性能方面具有相同的效果,为什么会选择使用RecycleView`?

编辑

我发现人们提出了类似的问题并且答案没有定论,在这里添加它们以保存记录.

Recyclerview与Listview

我们应该使用RecyclerView来取代ListView吗?

为什么RecyclerView没有onItemClickListener()?和RecyclerView如何与Listview不同?

Ari*_*Roy 282

随着Android Lollipop的出现,RecyclerView正式成功.RecyclerView功能更强大,灵活,是ListView的主要增强功能.我会尽力给你一个详细的见解.

1)ViewHolder模式

在ListView中,建议使用ViewHolder模式,但它绝不是强制性的.对于RecyclerView,使用RecyclerView.ViewHolder类是必需的.这是ListView和RecyclerView之间的主要区别之一.

它使RecyclerView中的事情变得更复杂,但我们在ListView中遇到的许多问题都得到了有效解决.

2)LayoutManager

这是RecyclerView带来的另一项重大改进.在ListView中,唯一可用的视图类型是垂直ListView.甚至没有官方的方法来实现水平ListView.

现在使用RecyclerView,我们可以拥有一个

i)LinearLayoutManager - 支持垂直和水平列表,

ii)StaggeredLayoutManager - 支持交错列表等Pinterest,

iii)GridLayoutManager - 支持显示在Gallery应用程序中看到的网格.

最棒的是我们可以根据需要动态完成所有这些操作.

3)物品动画师

ListViews缺乏对良好动画的支持,但RecyclerView为它带来了全新的维度.使用RecyclerView.ItemAnimator类,动画视图变得如此简单直观.

4)项目装饰

对于ListViews,动态装饰项目(如添加边框或分隔线)绝非易事.但是在RecyclerView的情况下,RecyclerView.ItemDecorator类为开发人员提供了巨大的控制权,但却让事情变得更加耗时和复杂.

5)OnItemTouchListener

由于其AdapterView.OnItemClickListener接口,截取ListView上的项目很简单.但RecyclerView赋予更多的权力和控制它的开发由RecyclerView.OnItemTouchListener但它会使事情变得复杂一点的开发商.

简单来说,RecyclerView比ListView更具可定制性,并为开发人员提供了大量的控制和能力.

  • 好答案.还有一些额外的巨大优势:RecyclerView在可见条目的前面和后面准备视图,如果你在后台获取位图,这是很好的.性能显着提高,尤其是使用RecyclerView.setHasFixedSize时.旧的ListView基于这样的前提:无法预先计算或缓存列表中条目的大小,这在滚动和执行布局时会导致疯狂的复杂化.需要一段时间才能适应它,但一旦你这样做,你就永远不会回去. (33认同)

小智 10

使用的另一个好处RecycleView是动画,它可以用两行代码完成

RecyclerView.ItemAnimator itemAnimator = new DefaultItemAnimator();
        recyclerView.setItemAnimator(itemAnimator);
Run Code Online (Sandbox Code Playgroud)

但是窗口小部件仍然是原始的,例如,您无法创建页眉页脚.

  • 而且你永远无法在这个意义上创建页眉和页脚.它们只是适配器中的其他视图类型.List视图将您的适配器包装在[`HeaderViewListAdapter`](http://developer.android.com/reference/android/widget/HeaderViewListAdapter.html)中,并在后台添加标头支持.使用`RecyclerView`,您就是控制者. (5认同)

Mus*_*eel 9

好吧,我挖这么点点发现比尔飞利浦这些宝石的文章RecycleView

RecyclerView可以做的不仅仅是ListView,但RecyclerView类本身的责任要少于ListView.开箱即用,RecyclerView不会:

  • 在屏幕上定位项目
  • 动画视图
  • 处理除滚动之外的任何触摸事件

所有这些东西都被用于ListView,但RecyclerView使用协作者类来代替这些工作.

您创建的ViewHolders也更加强大.它们是子类 RecyclerView.ViewHolder,它有一堆方法RecyclerView 用途.ViewHolders知道他们目前所处的位置,以及哪些项目ID(如果有的话).在这个过程中,ViewHolder 已被封为爵士.它曾经是ListView的工作,可以保持整个项目视图,并且ViewHolder只保留它的一小部分.

现在,ViewHolder在该ViewHolder.itemView 字段中保留所有内容,这是在ViewHolder的构造函数中为您分配的.