为了账号安全,请及时绑定邮箱和手机立即绑定

Android Recyclerview与带有Viewholder的ListView

/ 猿问

Android Recyclerview与带有Viewholder的ListView

繁花不似锦 2019-11-05 11:24:08

最近,我遇到了RecycleView与Android 5.0一起发布的android 系统,它似乎RecycleView只是一种封装了传统ListView视图,并结合了ViewHolder模式,该模式促进了视图的重用,而不是每次都创建视图。


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


查看完整描述

3 回答

?
杨魅力

随着Android Lollipop的出现,RecyclerView正式问世。与ListView相比, RecyclerView更加强大,灵活并且具有重大改进。我将尝试为您提供详细的了解。


1)ViewHolder模式


在ListView中,建议使用ViewHolder模式,但这绝不是强制性的。如果是RecyclerView,则使用RecyclerView.ViewHolder类是强制性的。这是ListView和RecyclerView之间的主要区别之一。


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


2)布局管理器


这是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


借助 ListView的AdapterView.OnItemClickListener接口,拦截ListView上的项目单击非常简单。但是RecyclerView通过RecyclerView.OnItemTouchListener为其开发人员提供了更多的功能和控制权,但它使开发人员的工作变得有些复杂。


简而言之,RecyclerView比ListView更具可定制性,并为其开发人员提供了很多控制和功能。


查看完整回答
反对 回复 2019-11-05
?
慕哥6287543

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


RecyclerView.ItemAnimator itemAnimator = new DefaultItemAnimator();

        recyclerView.setItemAnimator(itemAnimator);

但是小部件仍然是原始的,例如,您不能创建header和footer。


查看完整回答
反对 回复 2019-11-05
?
噜噜哒

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


RecyclerView可以做的比ListView还要多,但是RecyclerView类本身的责任比ListView少。开箱即用,RecyclerView不会:


在屏幕上放置项目

动画视图

处理滚动以外的任何触摸事件

所有这些东西都放入了ListView,但是RecyclerView使用协作器类来完成这些工作。


您创建的ViewHolders也更加强大。它们是子类 RecyclerView.ViewHolder,它具有许多方法RecyclerView 用途。ViewHolders知道他们当前绑定到的位置,以及哪个项目ID(如果有)。在此过程中,ViewHolder 已被封为爵士。过去,ListView的工作是保留整个项目视图,而ViewHolder仅保留其中的一小部分。


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


查看完整回答
反对 回复 2019-11-05

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信