Android Recyclerview与带Viewholder的ListView
我最近遇到了androidAndroid Recyclerview与带Viewholder的ListView,android,performance,listview,android-recyclerview,Android,Performance,Listview,Android Recyclerview,我最近遇到了androidRecyclerView,它是随android 5.0发布的,似乎RecyclerView只是一个封装的传统ListView,其中包含了ViewHolder模式,它促进了视图的重用,而不是每次都创建视图 使用RecyclerView还有哪些好处? 如果两者在性能方面具有相同的效果,为什么会选择RecyclerView` 编辑 我发现人们也问过类似的问题,但答案并不是决定性的,所以把它们加在这里是为了记录在案 使用RecycleView的另一个优点是动画,它可以在两行
RecyclerView
,它是随android 5.0发布的,似乎RecyclerView
只是一个封装的传统ListView
,其中包含了ViewHolder模式,它促进了视图的重用,而不是每次都创建视图
使用RecyclerView
还有哪些好处?
如果两者在性能方面具有相同的效果,为什么会选择RecyclerView`
编辑
我发现人们也问过类似的问题,但答案并不是决定性的,所以把它们加在这里是为了记录在案
使用
RecycleView
的另一个优点是动画,它可以在两行代码中完成
RecyclerView.ItemAnimator itemAnimator = new DefaultItemAnimator();
recyclerView.setItemAnimator(itemAnimator);
但是小部件仍然是原始的,例如您不能创建页眉和页脚使用
RecycleView
的另一个优点是动画,它可以通过两行代码完成
RecyclerView.ItemAnimator itemAnimator = new DefaultItemAnimator();
recyclerView.setItemAnimator(itemAnimator);
但是这个小部件仍然是原始的,例如你不能创建页眉和页脚好吧,只需一点点挖掘,我就在
回收视图上从Bill Philips那里找到了这些宝石
RecyclerView可以做的不仅仅是ListView,但是RecyclerView类
它本身的职责比ListView少。开箱即用,
RecyclerView不:
- 在屏幕上定位项目
- 设置视图动画
- 处理除滚动之外的任何触摸事件
所有这些东西都被放到ListView中,但RecyclerView使用
协作者类来执行这些工作
您创建的视图持有者也更强大。它们是子类
RecyclerView.ViewHolder
,它有一系列方法RecyclerView
使用<代码>视图持有者
知道他们当前绑定到的位置,如
以及哪些项目ID(如果有)。在此过程中,ViewHolder
他被封为爵士。过去ListView的工作是保持
整个项目视图,而视图保持架
仅保留其中的一小部分
现在,ViewHolder在ViewHolder.itemView
字段,该字段在ViewHolder的构造函数中为您指定
好的,经过一点挖掘,我在<代码>RecycleView RecyclerView可以做的不仅仅是ListView,但是RecyclerView类 它本身的职责比ListView少。开箱即用, RecyclerView不:
- 在屏幕上定位项目
- 设置视图动画
- 处理除滚动之外的任何触摸事件
RecyclerView.ViewHolder
,它有一系列方法RecyclerView
使用<代码>视图持有者知道他们当前绑定到的位置,如
以及哪些项目ID(如果有)。在此过程中,ViewHolder
他被封为爵士。过去ListView的工作是保持
整个项目视图,而视图保持架
仅保留其中的一小部分
现在,ViewHolder在ViewHolder.itemView
字段,该字段在ViewHolder的构造函数中为您指定
更多来自文章(去读吧!),但我认为指出以下几点很重要
在ListView中,关于如何处理单击事件存在一些模糊性:单个视图应该处理这些事件,还是ListView应该通过Listener处理它们?不过,在RecyclerView中,ViewHolder可以作为行级控制器对象来处理这些详细信息
我们在前面看到,LayoutManager处理定位视图,ItemAnimator处理设置视图动画。ViewHolder是最后一块:它负责处理RecyclerView显示的特定项目上发生的任何事件
更多来自文章(去读吧!),但我认为指出以下几点很重要
在ListView中,关于如何处理单击事件存在一些模糊性:单个视图应该处理这些事件,还是ListView应该通过Listener处理它们?不过,在RecyclerView中,ViewHolder可以作为行级控制器对象来处理这些详细信息
我们在前面看到,LayoutManager处理定位视图,ItemAnimator处理设置视图动画。ViewHolder是最后一块:它负责处理RecyclerView显示的特定项目上发生的任何事件
我使用了一个带有滑动图像加载器的
ListView
,内存在增长。然后我将列表视图
替换为回收视图
。它不仅在编码上更加困难,而且比列表视图
占用更多内存。至少,在我的项目中
在另一个活动中,我使用了带有
EditText的
的复杂列表。在某些情况下,输入方法可能会有所不同,也可以应用TextWatcher
。如果我使用了ViewHolder
,如何在滚动期间替换TextWatcher
?因此,我使用了一个没有视图支架的列表视图
,它可以工作。我使用了一个带有滑动图像加载程序的列表视图
,内存增长。然后我将列表视图
替换为回收视图
。它不仅在编码上更加困难,而且比列表视图
占用更多内存。至少,在我的项目中
在另一个活动中,我使用了带有EditText的
的复杂列表。在某些情况下,输入方法可能会有所不同,也可以应用TextWatcher
。如果我用