Android控件RecyclerView和ListView的异同

RecyclerView和ListView使用对比分析 又到了更新博文的时间了,最近在看一本很不错的心理学书籍,名字叫做 《拖延心理学》,封面长下面这样子书的内容主要是分析拖延症患者是如何把一件事一拖再拖,最后引发最终心里的焦虑和不安,甚至找了各种借口来做一些然并卵的自我安慰,最后再告诉你如何去改善自己的拖延症。目前我看了这书大约六分之一,就被各种心理分析打脸无数次,奈何此书写得太好,所以分享给有需要的童鞋(拖延症患者做好被无情打脸的心理准备)。刚好本... 阅读详情

Android是一个不断进化的平台,Android 5.0的v7版本支持包中引入了新的RecyclerView控件,正如官方文档所言,RecyclerView是ListView的豪华增强版。它主要包含以下几处新的特性,如ViewHolder,ItemDecorator,LayoutManager,SmothScroller以及增加或删除item时item动画等。官方推荐我们采用RecyclerView来取代ListView。

  • ViewHolder

ViewHolder是用来保存视图引用的类,无论是ListView亦或是RecyclerView。只不过在ListView中,ViewHolder需要自己来定义,且这只是一种推荐的使用方式,不使用当然也可以,这不是必须的。只不过不使用ViewHolder的话,ListView每次getView的时候都会调用findViewById(int),这将导致ListView性能展示迟缓。而在RecyclerView中使用 RecyclerView.ViewHolder 则变成了必须,尽管实现起来稍显复杂,但它却解决了ListView面临的上述不使用自定义ViewHolder时所面临的问题。 RecyclerView.ViewHolder 被BaseAdapter使用,以将posiiton绑定到上面(可以通过API查看 RecyclerView.ViewHolder#getPosition() 方法)。

  • LayoutManager

我们知道ListView只能在垂直方向上滚动,Android API没有提供ListView在水平方向上面滚动的支持。或许有多种方式实现水平滑动,但是请想念我,ListView并不是设计来做这件事情的。但是RecyclerView相较于ListView,在滚动上面的功能扩展了许多。它可以支持多种类型列表的展示要求,主要如下:

LinearLayoutManager ,可以支持水平和竖直方向上滚动的列表。

StaggeredGridLayoutManager ,可以支持交叉网格风格的列表,类似于瀑布流或者Pinterest。

GridLayoutManager ,支持网格展示,可以水平或者竖直滚动,如展示图片的画廊。

  • ItemAnimator

列表动画是一个全新的、拥有无限可能的维度。起初的Android API中,删除或添加item时,item是无法产生动画效果的。后面随着Android的进化,Google的Chat Hasse推荐使用 ViewPropertyAnimator 属性动画来实现上述需求。

相比较于ListView, RecyclerView.ItemAnimator 则被提供用于在RecyclerView添加、删除或移动item时处理动画效果。同时,如果你比较懒,不想自定义ItemAnimator,你还可以使用 DefaultItemAnimator 。

  • Adapter

ListView的Adapter中,getView是最重要的方法,它将视图跟position绑定起来,是所有神奇的事情发生的地方。同时我们也能够通过registerDataObserver在Adapter中注册一个观察者。RecyclerView也有这个特性, RecyclerView.AdapterDataObserver 就是这个观察者。ListView有三个Adapter的默认实现,分别是ArrayAdapter、CursorAdapter和SimpleCursorAdapter。然而,RecyclerView的Adapter则拥有除了内置的内DB游标和ArrayList的支持之外的所有功能。 RecyclerView.Adapter 的实现的,我们必须采取措施将数据提供给Adapter,正如BaseAdapter对ListView所做的那样。

  • ItemDecoration

在ListView中如果我们想要在item之间添加间隔符,我们只需要在布局文件中对ListView添加如下属性即可:


android:divider="@android:color/transparent"
android:dividerHeight="5dp"

有趣的是,RecyclerView在默认情况下并不在item之间展示间隔符。尽管Google的家伙有意地将这个问题遗留给我们去自定义间隔符,但这的确增加了开发人员的负担。如果你想要添加间隔符,你必须使用RecyclerView.ItemDecoration类来实现。或者,你可以应用官方示例中的 DividerItemDecoration.java 文件。

  • OnItemTouchListener

ListView通过AdapterView.OnItemClickListener接口来探测点击事件。而RecyclerView则通过RecyclerView.OnItemTouchListener接口来探测触摸事件。它虽然增加了实现的难度,但是却给予开发人员拦截触摸事件更多的控制权限。

  • Others

ListView可以设置选择模式,并添加MultiChoiceModeListener,如下所示:

 listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
  listView.setMultiChoiceModeListener(new MultiChoiceModeListener() {
      public boolean onCreateActionMode(ActionMode mode, Menu menu) { ... }
      public void onItemCheckedStateChanged(ActionMode mode, int position,
  long id, boolean checked) { ... }
      public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
          switch (item.getItemId()) {
              case R.id.menu_item_delete_crime:
              CrimeAdapter adapter = (CrimeAdapter)getListAdapter();
             CrimeLab crimeLab = CrimeLab.get(getActivity());
             for (int i = adapter.getCount() - 1; i >= 0; i--) {
                 if (getListView().isItemChecked(i)) {
                     crimeLab.deleteCrime(adapter.getItem(i));
                 }
           }
         mode.finish();
         adapter.notifyDataSetChanged();
         return true;
         default:
             return false;
 }
     public boolean onPrepareActionMode(ActionMode mode, Menu menu) { ... }
     public void onDestroyActionMode(ActionMode mode) { ... }
 });


而RecyclerView则没有此功能。

总之,通过比较我们可以发现,RecyclerView充满了大量的自定义功能,它可以用于实现复杂的列表或网格,但实现起来稍显得复杂。

博客书写过程中参考内容有:

Android RecyclerView vs ListView|Comparision

RecyclerView Part 1:Fundamentals For ListView Experts

RecyclerView Part 2:Choice Modes
RecyclerView 和 ListView 使用对比分析 立即下载

相关推荐

微信h5 支付,已经获得weixin://wap/pay?prepayid,但是无法调起微信客户端支付

结果几个接口,最终获得到到一直包含调起微信客户端的支付链接 但是直接打开这个页面,却不能调起微信客户端支付,原因是,在打开新页面的时候,需要设置a.rel = "noreferrer"; <body> <a href="javascript:void(0)" onclick="openNewWindowNoreferrer(this)">点击支付</a&...

qq_31683775的博客 4万+

ListView和RecyclerView的区别

ListView和RecyclerView的区别: 1、优化 ListView优化需要自定义ViewHolder和判断convertView是否为null。 而RecyclerView是存在规定好的ViewHolder。 2、布局不同 对于ListView,只能在垂直的方向滚动。而对于RecyclerView,他里面的LayoutManager中制定了一套可以扩展的布局排列接口,所以我们可以重写LayoutManager来定制自己需要的布局。RecycleView可以根据LayoutManger有横向,瀑布

sjh66655的博客 9156

Win11家庭版如何让Win+R运行CMD默认管理员权限?3种方法实测有效

本文针对Win11家庭版用户,实测了三种让Win+R运行CMD默认获取管理员权限的有效方法。通过分析UAC机制与家庭版功能限制,详细介绍了注册表编辑、快捷方式创建与任务计划程序三种方案的原理、步骤与风险对比,帮助用户根据安全与效率需求选择最佳方案,实现一键高效管理。

sat99的博客 1274

ListView和RecyclerView 的区别

1.缓存不同 a.ListView 是做的二级缓存,缓存的是View(ViewHolder需要自己去定义,如果不使用ViewHolder的话,每次getView的时候都会调用findViewById(int),这将导致ListView性能展示迟缓. b.RecyclerView 做的是四级缓存,缓存的是Holder.默认缓存的数量是5个.(页面优化,也可以从设置缓存数量这块入手...

wolfking0608的博客 1418

IKM 测试题 - Java SE 8 评估测试题目

IKM 测试题 - Java SE 8 评估测试题目

licheng11y的博客 1315

智能车‘大脑’的诞生:揭秘电磁循迹代码背后的控制论与系统思维

本文深入探讨智能车电磁循迹系统的核心架构与控制原理,揭示了其作为精密闭环系统如何通过模块化设计、信号处理、PID控制算法及电机驱动实现自主导航。重点分析了电磁信号采集与处理流程框架,为开发者提供从理论到实践的全面指南。

arduino9maker的博客 531

[Android] ListView 和 RecyclerView 的简单使用

ListView 和 RecyclerView 的简单使用 文章目录ListView 和 RecyclerView 的简单使用- ***ListView 和 RecyclerView 使用的大致相同点***- ***ListView的基本使用***- ***ListView的基本优化***- ***RecyclerView 的基本使用***- ***ListView 和 RecyclerView 的对比***- ***总结*** 在安卓App中,列表展示的功能十分常见。ListView 和 Recycler

qq_39121188的博客 1806

基于Python的携程景点评价爬虫与情感评分分析

摘要: 本项目通过Python技术栈实现携程景点评论的情感分析系统,包含数据爬取、文本预处理、情感评分和可视化分析全流程。使用requests抓取评论接口,jieba进行中文分词,SnowNLP计算情感得分(0-1),并通过词云、情感分布图呈现结果。典型分析显示72%评论为正面,负面反馈多涉及"排队久""票价贵"等问题。系统可辅助景点口碑管理,扩展方向包括多景点对比、BERT模型优化等。项目强调需遵守爬虫伦理,控制请求频率,适用于非商业用途的旅游数据分析。(150字)

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 977

【Android面试】Listview和Recyclerview的区别

请你谈谈Listview和Recyclerview的区别Listview和Recyclerview的区别(阿里一面,滴滴一面,被问到)简单比较布局上局部刷新item view的重用ViewHolder嵌套滑动机制空数据处理Listview的二级缓存ActiveViewsScrapViewsRecyclerview的四级缓存RecyclerRecycledViewPoolViewCacheExtension Listview和Recyclerview的区别(阿里一面,滴滴一面,被问到) 简单比较 listvi

Rose J 的博客 5931

SAP VC 可配置物料超级BOM简介

在有些业务中比如:汽车、笔记本、电脑、电梯等产品中,其中组成产品的型号个框架是确认的 ,但是框架内部的BOM是可变的,在客户下销售订单的时候,选取对应的组件 ,让后通过MRP的计算优生产线对这样的销售订单提供生产。这个时候我们需要选择我们需要的内存和硬盘的型号,还记得我们前面创建的特征值对应的吗,A对应的8G、B对应16G、X对应1T硬盘、Y对应2T硬盘,这里我们填写对应的值,我们这里选择16G的内存和2T的硬盘,B和Y。3、当我们选择了可配置物料的生产模式时,基本上就选择了按单生产的生产模式了。

我小时候很黑的博客 1万+

1、Ka频段双极化低剖面卫通相控阵天线

设计了双馈口叠层十字缝隙耦合天线,采用“双线极化天线 +旋转馈电 + 移相控制”架构,采用双馈口的叠层十字缝隙耦合天线,并以 2 x2 阵列为主体,旋转排布实现二次圆极化,同时极化可切换,通过多层 PCB 工艺实现天线层、控制/电源层功分网终层、芯片层一体化集成,研制出 64 阵元的圆极化可切换发射天线,测试结果表明:天线工作 频段为 27.5 ~31 GHz,可实现60°扫描,法向轴比

qq_43416206的博客 4369

Android控件RecyclerView与ListView的异同

在我的一篇介绍Android新控件RecyclerView的博客(Android L新控件RecyclerView简介)中,一个读者留言说RecyclerView跟ListView之间好像没有什么不同,我觉得这是一个好问题,应该明确地区分一下两者的睯,所以我就研究了一下它俩之间的区别,然后也对两者的使用有了更加深入的了解。 Android是一个不断进化的平台,Android 5.0的v...

weixin_30305735的博客 236

粒子群算法Particle Swarm Optimization超详细解析+代码实例讲解

粒子群算法,也称粒子群优化算法或鸟群觅食算法(Particle Swarm Optimization),缩写为 PSO, 是近年来由J. Kennedy和R. C. Eberhart等开发的一种新的进化算法(Evolutionary Algorithm - EA)。

猫敷雪 893

Android控件RecyclerView及与ListView的异同

转发:http://www.cnblogs.com/littlepanpc/p/3859983.htmlhttp://www.cnblogs.com/littlepanpc/p/4497290.html?utm_source=tuicool&utm_medium=referral

loadingru的博客 386

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

RecyclerView 和 ListView 使用对比

Android ListView 与 RecyclerView 对比浅析:缓存机制 Android–ListView和RecyclerView控件的使用 Android ListView工作原理完全解析,带你从源码的角度彻底理解 RecyclerView和ListView的异同 ...

shiningdreamercaihua的博客 116

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

RecyclerView与ListView的异同

转自:http://www.cnblogs.com/littlepanpc/p/4497290.html?utm_source=tuicool&utm_medium=referral Android是一个不断进化的平台,Android 5.0的v7版本支持包中引入了新的RecyclerView控件,正如官方文档所言,RecyclerView是ListView的豪华增强版。它主要包

DerWeltraum 3043

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

android listview替代,Android笔记——RecyclerView替代ListView

ListView是常用列表控件,但设置Adapter时自定义代码较为复杂,因此Android3.0后,增加RecyclerView替代ListViewRecyclerView没有提供OnItemClickListener接口,因此要监听列表项点击事件需自行对每个列表项进行设置监听器-----------------------------------------------------------...

weixin_35318150的博客 701

android控件recyclerView的使用

Android控件RecyclerView与ListView的异同优点:Android中RecyclerView控件支持线性布局、网格布局、瀑布流布局 三种,还可以而且同时还能够控制横向和纵向滚动。自带添加item和删除item的动画效果缺点:RecyclerView自身没有点击事件,需要写接口,在onBindViewHolder方法中添加点击事件实现效果图:第一步:在build.gradle中添...

cf8833的博客 504

Listview 和RecycleView的异同

在我的一篇介绍Android新控件RecyclerView的博客( Android L新控件RecyclerView简介 )中,一个读者留言说RecyclerView跟ListView之间好像没有什么不同,我觉得这是一个好问题,应该明确地区分一下两者的睯,所以我就研究了一下它俩之间的区别,然后也对两者的使用有了更加深入的了解。 Android是一个不断进化的平台,Android 5.0的

XST891205的博客 438

RecyclerView和ListView的异同

RecyclerView和ListView的异同 Android是一个不断进化的平台,Android 5.0的v7版本支持包中引入了新的RecyclerView控件,正如官方文档所言,RecyclerView是ListView的豪华增强版。它主要包含以下几处新的特性,如ViewHolder,ItemDecorator,LayoutManager,SmothScroller以及增加或删除item时...

augfun的博客 531
上一篇: 面试题:如何优化ListView的性能?
下一篇: RecyclerView Animators GitHub
AuthFailure
博客等级 码龄10年 0粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值