RecyclerView和ListView使用对比分析

又到了更新博文的时间了,最近在看一本很不错的心理学书籍,名字叫做 《拖延心理学》,封面长下面这样子

书的内容主要是分析拖延症患者是如何把一件事一拖再拖,最后引发最终心里的焦虑和不安,甚至找了各种借口来做一些然并卵的自我安慰,最后再告诉你如何去改善自己的拖延症。目前我看了这书大约六分之一,就被各种心理分析打脸无数次,奈何此书写得太好,所以分享给有需要的童鞋(拖延症患者做好被无情打脸的心理准备)。刚好本人平时也有看书的好习惯,以后看到什么不错的书,也在博文里面分享一下好了。好了,吹水就先到这里,接下来进入文章的正题。

今天这篇文章主要是向大家介绍 RecyclerView 和 ListView 的使用对比,文章主要包括以下几点的内容:

  • RecyclerView 和 ListView 布局效果的对比
  • RecyclerView 和 ListView 一些常用的功能 和 API 的对比
  • RecyclerView 和 ListView 在 Android L 引入嵌套滚动机制之后的对比

有一点需要强调下,文中所有的效果在真机上都是很流畅的,因为录制 GIF 图很容易掉帧,所以特地放慢了操作,千万不要误会成卡顿了啊!

布局效果对比

作为一枚控件,要引起开发者使用的欲望自然先是从显示效果看起(看脸的世界),ListView 大家对效果已经很熟悉了,这里直接跳过,而作为 RecyclerView,它能带给效果要比 ListView 强大得多,如下图

Android 默认提供的 RecyclerView 就能支持 线性布局、网格布局、瀑布流布局 三种(这里我们暂且不提代码细节,后文再说),而且同时还能够控制横向还是纵向滚动。怎样,从效果上足以碾压 ListView 有木有。

  • 横向滚动的ListView开源控件是不是可以不用再找了?对,你没看错!
  • 瀑布流效果的开源控件是不是可以不用再找了?对,你没看错!
  • 连横向滚动的GridView都不用找了!对,你没看错!

到此,展示效果上的差距一目了然。

API 使用对比

当然,一个控件我们不能完全只看效果,关键还是要看实用性,看看有没有方便我们调用的 API提高我们的开发效率。所以,接下来我们就从各个方面来看看 RecyclerView 和 ListView 在提供的API调用上的一些实践比较。

基础使用

ListView 的基础使用大家再熟悉不过,其使用的关键点主要如下:

  • 继承重写 BaseAdapter 类
  • 自定义 ViewHolder 和 convertView 一起完成复用优化工作

由于 ListView 已经老生常谈,所以此处就不去写示例代码了。 RecyclerView 基础使用关键点同样有两点:

  • 继承重写 RecyclerView.Adapter 和 RecyclerView.ViewHolder
  • 设置布局管理器,控制布局效果

示例代码大致如下:


// 第一步:继承重写 RecyclerView.Adapter 和 RecyclerView.ViewHolder
public class AuthorRecyclerAdapter extends RecyclerView.Adapter<authorrecycleradapter.authorviewholder> {

    ...

    @Override
    public AuthorViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        ...
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(AuthorViewHolder holder, int position) {
        ...
    }

    @Override
    public int getItemCount() {
        if (mData == null) {
            return 0;
        }
        return mData.size();
    }

    class AuthorViewHolder extends RecyclerView.ViewHolder {

        ...

        public AuthorViewHolder(View itemView) {
            super(itemView);
            ...

        }
    }
}

mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
mRecyclerAdapter = new AuthorRecyclerAdapter(mData);

// 第二步:设置布局管理器,控制布局效果
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(RecyclerDemoActivity.this);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(linearLayoutManager);

mRecyclerView.setAdapter(mRecyclerAdapter);

从基础使用上看,我们明显可以看出,RecyclerView 相比 ListView 在基础使用上的区别主要有如下几点:

  • ViewHolder 的编写规范化了
  • RecyclerView 复用 Item 的工作 Google 全帮你搞定,不再需要像 ListView 那样自己调用 setTag
  • RecyclerView 需要多出一步 LayoutManager 的设置工作

布局效果

在最开始就提到,RecyclerView 能够支持各种各样的布局效果,这是 ListView 所不具有的功能,那么这个功能如何实现的呢?其核心关键在于 RecyclerView.LayoutManager 类中。从前面的基础使用可以看到,RecyclerView 在使用过程中要比 ListView 多一个 setLayoutManager 步骤,这个 LayoutManager 就是用于控制我们 RecyclerView 最终的展示效果的。

而 LayoutManager 只是一个抽象类而已,系统已经为我们提供了三个相关的实现类 Line

【腾讯Bugly干货分享】Android ListView与RecyclerView对比浅析--缓存机制 秉承着实事求是的作风,弄清楚RecyclerView是否有足够的吸引力替换掉ListView,我从性能这一角度出发,研究RecyclerView和ListView二者的缓存机制,并得到了一些较有益的"结论",待我慢慢道来。 同时也希望能通过本文,让大家快速了解RecyclerView与ListView在缓存机制上的一些区别,在使用上也更加得心应手吧。 阅读详情

相关推荐

RecyclerView 的缓存复用机制

本文深入解析了RecyclerView的核心工作机制,重点阐述了其四级缓存体系和复用机制。主要内容包括: 四级缓存结构:Scrap缓存(mAttachedScrap/mChangedScrap):用于临时保存布局过程中可见的ViewHolder CacheView:保存最近移出屏幕的ViewHolder ViewCacheExtension:开发者自定义缓存层 RecycledViewPool:终极回收池,按ViewType分类存储 复用机制:详细分析了ViewHolder的获取流程,从各级缓存逐层查找

m0_62169009的博客 1388

RecyclerView浅析,android基础入门

最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的14套腾讯、字节跳动、阿里、百度等2021最新面试真题解析,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

m0_60388216的博客 949

深入解析RecyclerView 源码——绘制流程、缓存机制、动画等

前言 本文打算对 RecyclerView 做一个详细完整的、重点突出的分析与总结,因为 RecycelrView 源码很长(光 RecyclerView 文件本身就有 13000+ 行),因此文章也会很长,但一通分析下来后会发现,RecyclerView 虽然是 ListView 的加强版,除了在使用方法上类似之外,关键源码上也是非常类似的。 RecyclerView 的使用可以参考大神的文章: Android RecyclerView 使用完全解析 体验艺术般的控件 RecyclerView 和 Lis

chuhe1989的博客 613

Android ListView核心原理与性能优化实践

ListView作为Android开发中的经典列表控件,基于适配器模式实现数据与视图的分离,是理解Android视图系统的重要入口。其核心机制包括视图复用、数据绑定和滚动处理,通过ViewHolder模式可显著提升长列表性能。在移动应用开发中,列表展示是最常见的UI需求之一,ListView以其简单易用的特性,特别适合处理静态数据展示场景。通过合理使用ArrayAdapter或自定义BaseAdapter,开发者可以快速实现各类列表界面。虽然现代开发中RecyclerView逐渐成为主流,但掌握ListVi

weixin_30847865的博客 373

Android ListView核心原理与优化实践

ListView作为Android开发中的经典列表控件,基于适配器模式实现数据与视图的分离,是理解Android UI体系的重要切入点。其核心原理通过Adapter桥接数据源与视图渲染,支持视图回收机制提升性能。相比现代RecyclerView,ListView在简单场景下仍具工程价值,特别适合快速实现垂直列表需求。典型应用场景包括消息列表、设置项展示等基础界面,通过ViewHolder模式优化和异步加载可显著提升滚动流畅度。掌握ListView的工作原理对理解RecyclerView等后续技术也有重要帮助

weixin_30493401的博客 364

【internship life】小米android面经

2017/7/10日入职,到现在,在小米实习了将近两个月,这两个月总体来说还是挺愉快的,导师特别负责任,教给我很多东西,比起在学校自己学习,在这里实习收获很多。小组的成员也都对我好好,也体验了五彩城附近几乎所有的好吃的,哈哈哈哈哈哈哈,感觉自己月底回学校都可能无法适应。前几天提出能不能转正,这两天开始面试,把面试的问题总结下来。感觉这个面试比较注重应用,好多我都没有接触到,也和实习的小组的项目有点联

chandelierr的博客 1923

Listview与RecyclerView对比浅析【重点对比缓存】(1)

本文讲解了我对Android开发现状的一些看法,也许有些人会觉得我的观点不对,但我认为没有绝对的对与错,一切交给时间去证明吧!愿与各位坚守的同胞们互相学习,共同进步!《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!ndroid开发现状的一些看法,也许有些人会觉得我的观点不对,但我认为没有绝对的对与错,一切交给时间去证明吧!愿与各位坚守的同胞们互相学习,共同进步!《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》

2401_84149339的博客 848

Android的ListView和RecyclerView的基本用法

在Android 5.0 版本之前,为了方便的显示多行数据,形如QQ聊天信息主界面,最常用的选择无非是ListView控件,但是ListView控件本身就有很大的局限性和效率问题(相对于RecyclerView控件)来说,比如说ListView只能竖向滚动显示数据,不能横向滚动显示数据,在一些特殊的需求中,ListView就无能为力了。在Android5.0版本之后,Android官方推出了一个新的

指点 2609

RecyclerView与ListView 对比浅析:缓存机制

一. 背景 PS:相关知识: ListView与RecyclerView缓存机制原理大致相似,如下图所示: 滑动过程中,离屏的ItemView即被回收至缓存,入屏的ItemView则会优先从缓存中获取,只是ListView与RecyclerView的实现细节有差异.(这只是缓存使用的其中一个场景,还有如刷新等) 二. 正文 2.1 缓存机制对比 1. 层级不同: RecyclerVi...

疾风剑豪 837

2025年了,我重新学习RecyclerView,ListView,GridView, Viewpager,ViewPager2的用法

都2025年了 我知道大家在Android中滑动列表时,大多数时候选择的是RecyclerView,功能丰富,使用灵活, 性能良好。最新的Android Api已经很完善了, 不像早期的API有很多局限性。最近在准备面试题,想起早年间问过的面试问题,还是想着做一个对比笔记。notifyDataSetChanged()全局刷新notifyItemChanged(0)局部刷新notifyItemRemoved(0)局部删除notifyDataSetChanged()全部刷新。

caomeimaomao的博客 1815

RecyclerView(四)—— RecyclerView回收和复用机制分析

RecyclerView回收和复用机制分析 1 RecyclerView的刷新回收复用机制 RecyclerView在layout子View时,都通过回收复用机制来管理。RecyclerView的回收复用机制确实很完善,覆盖到各种场景中,但并不是每种场景的回收复用时都会将机制的所有流程走一遍的。举个例子说,在setLayoutManager、setAdapter、notifyDataSetChanged或者滑动时等等这些场景都会触发回收复用机制的工作。但是如果只是 RecyclerView滑动的场景触发的回

xingyu19911016的博客 3757

2020最新中高阶Android面试题总结-下(附解题思路)

2.ViewGroup和View组成了一个树状结构,根节点为Activity内部包含的一个ViwGroup。 3.触摸事件由Action_Down、Action_Move、Aciton_UP组成,其中一次完整的触摸事件中,Down和Up都只有一个,Move有若干个,可以为0个。 4.当Acitivty接收到Touch事件时,将遍历子View进行Down事件的分发。ViewGroup的遍历可以看成是递归的。分发的目的是为了找到真正要处理本次完整触摸事件的View,这个View会在onTouchuEvent结果

m0_54850467的博客 461

Android Filter ListView, RecyclerView

今天整理的是之前项目中写的一个首页针对于列表进行条件过滤的效果。相关描述: 此次省略xxx字… 。 还是来看一下效果图吧(稍微有那么一点点大,1.5M左右,注意看好操作之后的变化):废话就不多说了,接下来直奔主题,先看一下我们的界面布局:<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schema

发强 3207

Android UI开发基础:RecyclerView与ListView的优化

本文详细介绍了ListView和RecyclerView的优化技巧,从基础概念到高级应用,系统地讲解了如何提高列表性能和用户体验。RecyclerView作为Android现代列表控件,提供了更多的灵活性和性能优势,是开发高性能列表界面的首选。在实际开发中,应根据具体需求选择合适的优化策略,如使用DiffUtil进行高效更新、实现分页加载、优化布局结构等。同时,结合Epoxy、Paging等优秀的开源库,可以更轻松地构建复杂且高性能的列表界面。下一篇文章将介绍Fragment的生命周期与使用,敬请期待。

Ya-Jun 的博客 786

RecyclerView Item加载动画

最近公司项目需求更新慢,有时间偷偷的玩点别的技术~~这段时间更新的博客内容不太系统,但也是平时比较常用的技术。 今天和大家分享一篇关于ReclcyerView的内容。说到RecyclerView,想必大家都已玩的熟透在心了。之前有人问我ListView和RecyclerView的区别是什么?并且很多人认为RecyclerView比ListView强多了。的确,RecyclerView在动画处

... 5158

美团外卖mtgsig 1.2逆向工程:从补环境到签名生成全解析

本文深入解析了美团外卖mtgsig 1.2签名算法的逆向工程全流程。从环境检测原理与补环境实战入手,详细拆解了签名JSON中每个关键字段的生成逻辑,并重点剖析了核心签名a2的生成步骤,涉及设备指纹、MD5、AES加密等关键技术。最后提供了构建签名生成器的实践思路与常见坑点,为理解复杂风控体系提供了完整的技术视角。

weixin_29324401的博客 1755

Simulink Test Sequence实战:5步搞定复杂逻辑测试(附Excel模板)

本文详细介绍了如何利用Simulink Test Sequence模块高效完成复杂逻辑测试。通过对比传统Excel方法的不足,阐述了Test Sequence以流程图和自然语言描述测试场景的优势,并提供了从环境搭建、逻辑构建到与Test Manager集成、利用Excel模板进行数据驱动的完整5步实战指南,帮助工程师将复杂的状态机或逻辑流测试从繁琐的‘体力活’转变为高效的‘技术活’。

snow3的博客 250

R语言实战:5分钟搞定GEO单细胞数据(scRNA-seq)下载与整理(附完整代码)

本文详细介绍了如何使用R语言快速下载和整理GEO单细胞数据(scRNA-seq),提供完整的自动化处理代码。从环境准备、数据获取到文件整理和质量检查,涵盖10X Genomics标准格式及非标准数据的处理技巧,帮助生物信息学研究者高效完成数据预处理工作。

weixin_29054399的博客 601

FortiOS路径遍历漏洞CVE-2022-41328实战复现:从环境搭建到漏洞利用全记录

本文深入解析FortiOS路径遍历漏洞CVE-2022-41328,从漏洞背景、影响范围到技术原理进行全面剖析。提供详细的漏洞复现环境搭建步骤和实战利用方法,并给出官方修复方案与临时缓解措施,帮助企业有效防御此类防火墙漏洞风险。

weixin_30485379的博客 522

Photoscan+Smart3D+CC组合建模实战:如何用三款工具打造高精度实景模型

本文详细介绍了如何整合Photoscan、Smart3D和ContextCapture三款软件,构建高效高精度的实景三维建模工作流。通过利用Photoscan稳健的空三解算、Smart3D精准的刺点优化,以及ContextCapture强大的最终建模能力,该方案能有效应对复杂地形与海量数据,显著提升模型质量与生产效率,适用于测绘、文化遗产数字化等专业领域。

weixin_29230649的博客 103

PyTorch生成式人工智能(7)——生成对抗网络(Generative Adversarial Network, GAN)实践详解

生成对抗网络 (Generative Adversarial Network, GAN) 最早由 Ian Goodfellow 于 2014 年提出,其中生成器试图创建与真实样本无法区分的数据样本,而判别器则试图区分生成器生成的样本与真实样本。在本节中,我们将介绍 GAN 的理论基础。然后,介绍如何使用 PyTorch 从零开始构建 GAN,以便了解所有细节,深入理解 GAN 的内部工作原理,为后续讨论 GAN 的其他更高级内容奠定基础,比如生成高分辨率图像或逼真的音乐。

盼小辉丶的博客 1万+

系统安全性评估 (SSA) 详细解析

系统安全性评估(SSA)是一种自下而上的验证过程,目的是确保系统设计中的每个功能、子系统、硬件和软件的实现,符合早期通过 FHA 和 PSSA 设定的安全性需求。它通过对已实现的系统进行系统性综合评价,检验各项设计和安装是否符合预期的安全性目标,最终支持飞机的适航认证。飞行控制系统是飞机安全性设计的核心子系统之一,负责控制飞机的姿态和方向。为了确保飞行控制系统能够在各种飞行条件下保持安全运行,SSA 被用于验证该系统的设计是否满足 FHA 中设定的安全性目标。

qq_41854911的博客 1651

Thinkpad可以安装Win11吗?Thinkpad升级Win11教程

win11正式版推出之后,不少用户也想要体验一把新系统,但是不知道thinkpad是否支持win11,其实基本上现在在售的都是可以升级win11的。2、如果大家使用的是老款的ThinkPad,那么可以通过软件来检测自己是否支持win11。【电脑健康状况检查下载】答:在售的ThinkPad都是可以支持win11的,但是部分旧版本不支持。2、这时候想要升级win11的话,就可以通过镜像系统的方式来跳过系统检测。3、如果使用上面的软件检测可以支持win11,那么只要进入“设置”

xhp618的博客 2986

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

上一篇: 深入理解 Android 中的 Matrix
下一篇: RecyclerView和ListView使用对比分析
D_clock爱吃葱花
博客等级 码龄14年 163粉丝 13原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值