Android中RecyclerView使用详解(一)
目录
- 概述
- 优点
- 列表布局RecyclerView
- 一、创建RecyclerView并且在布局中绑定
- 二、实现RecyclerView单个item的布局
- 三、给RecyclerView写一个对应的适配器Adapter
- 1.创建自定义的ViewHolder
- 2.继承Adapter,泛型使用我们自定义的ViewHolder
- 3.重写Adapter的三个方法
- onCreateViewHolder
- getItemCount
- onBindViewHolder
- 四、RecyclerView绑定布局和适配器
- 五、RecyclerView单个item点击事件
- 1.创建监听接口
- 2.Activity中实现接口并且传给Adapter
- 3.绑定事件中监听
- 4.当点击时,执行的是Activity中实现的方法
概述
RecyclerView 是 Android 开发中一个非常强大且灵活的组件,用于在有限的窗口中展示大量数据集。它提供了一种比传统的 ListView 更高效的方式来滚动大量数据项。RecyclerView 不仅可以像 ListView 那样垂直滚动,还可以水平滚动,甚至支持更复杂的布局,如网格布局(Grid Layout)、瀑布流布局(Staggered Grid Layout)。
优点
- ViewHolder对视图复用;
- 可以垂直滚动和水平滚动;
- 支持多种布局;
列表布局RecyclerView
今天实现一个简单的RecyclerView,效果如下图所示:

一、创建RecyclerView并且在布局中绑定
<androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/rlv_1"android:layout_width="match_parent"android:layout_height="match_parent" />
rlv1 = findViewById(R.id.rlv_1)
二、实现RecyclerView单个item的布局
```kotlin
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="#cccccc"android:paddingTop="10dp"android:paddingBottom="10dp"android:paddingRight="20dp"android:paddingLeft="20dp"><ImageViewandroid:id="@+id/iv_icon"android:layout_width="50dp"android:layout_height="50dp"android:layout_marginRight="20dp"android:src="@drawable/fangyuan" /><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="match_parent"android:layout_weight="1"android:orientation="vertical"><TextViewandroid:id="@+id/tv_name"android:layout_width="wrap_content"android:layout_height="0dp"android:layout_weight="1"android:text="小白"android:textColor="@color/black"android:textSize="16sp" /><TextViewandroid:id="@+id/tv_content"android:layout_weight="1"android:layout_width="wrap_content"android:layout_height="0dp"android:textSize="14sp"android:textColor="#666666"android:text="今天上班有摸鱼吗?"/></LinearLayout><TextViewandroid:id="@+id/tv_time"android:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="end"android:layout_marginTop="20dp"android:textColor="#999999"android:textSize="14sp"android:text="2024年7月9日"/></LinearLayout>
三、给RecyclerView写一个对应的适配器Adapter
1.创建自定义的ViewHolder
class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {var ivIcon: ImageView? = nullvar tvName: TextView? = nullvar tvContent: TextView? = nullvar tvTime: TextView? = nullinit {ivIcon = itemView.findViewById(R.id.iv_icon)tvName = itemView.findViewById(R.id.tv_name)tvContent = itemView.findViewById(R.id.tv_content)tvTime = itemView.findViewById(R.id.tv_time)}}
2.继承Adapter,泛型使用我们自定义的ViewHolder
class MyAdapter(
): RecyclerView.Adapter<MyViewHolder>() {
}
3.重写Adapter的三个方法
onCreateViewHolder
顾名思义,创建我们自定义ViewHolder的实例,也就是将item的布局作为itemView。ViewHolder是列表中每个item。
inflate,三个参数,
第一个为加载的布局id;第二个为该布局的外部是否嵌套一层父布局,不用就是null;第三个,是否给加载的布局添加一个root的外层容器。
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {val view = LayoutInflater.from(context).inflate(R.layout.item_list, parent, false)val myViewHolder = MyViewHolder(view)return myViewHolder}
getItemCount
item的条数
override fun getItemCount(): Int {return nameList.size}
onBindViewHolder
通过onCreateViewHolder()绑定了布局之后,接下来对数据和布局里面的控件进行绑定。
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {holder.tvName?.text = nameList[position]holder.tvContent?.text = contentList[position]holder.tvTime?.text = timeList[position]}
四、RecyclerView绑定布局和适配器
private fun initData() {val nameList = ArrayList<String>()val contentList = ArrayList<String>()val timeList = ArrayList<String>()for (i in 0..19) {nameList.add("方正")contentList.add("送外卖第${i}天")timeList.add("${1}月${i + 1}日")}val adapter = MyAdapter(this,nameList,contentList,timeList)val manager = LinearLayoutManager(this)rlv1?.layoutManager = managerrlv1?.adapter = adapter}
至此,已经实现了开头的列表效果。
五、RecyclerView单个item点击事件
1.创建监听接口
interface OnItemClickListener {fun onItemClick(position: Int)
}
2.Activity中实现接口并且传给Adapter
3.绑定事件中监听
holder.itemView.setOnClickListener{listener.onItemClick(position)}
4.当点击时,执行的是Activity中实现的方法
相关文章:
Android中RecyclerView使用详解(一)
目录 概述优点列表布局RecyclerView一、创建RecyclerView并且在布局中绑定二、实现RecyclerView单个item的布局三、给RecyclerView写一个对应的适配器Adapter1.创建自定义的ViewHolder2.继承Adapter,泛型使用我们自定义的ViewHolder3.重写Adapter的三个方法onCreate…...
坑3.上传图片(阿里云空间,oss验证)(未验证)
笔记 20240710 未验证,现在还没有阿里云空间,等买个sit环境就可以验证一下。 前端 页面 <!--页面--> <el-form-item label"优惠券图片" prop"couponImg"><single-upload v-model"dataForm.couponImg"&g…...
注册登录后上传文件到本地数据库项目
在上一篇的基础上我有添加了登录注册功能文件上传 更新一下代码添加登录注册功能 app.js // app.js const express require(express); const bodyParser require(body-parser); const cors require(cors); const db require(./models/db); const User require(./models…...
【学习笔记】无人机(UAV)在3GPP系统中的增强支持(十三)-更换无人机控制器
引言 本文是3GPP TR 22.829 V17.1.0技术报告,专注于无人机(UAV)在3GPP系统中的增强支持。文章提出了多个无人机应用场景,分析了相应的能力要求,并建议了新的服务级别要求和关键性能指标(KPIs)。…...
react 组件通信 —— 父子传值 【 函数式/类式 】
1、函数式组件通信 父子间通信 —— 父传子 父组件 export default function father() {return (<div style{{width:400px,height:200px,background:pink,marginLeft:500px}}>我是父组件<hr /><Son name{"韩小刀"}/></div>) } 子组件 ex…...
【SpringBoot】95、SpringBoot中使用MyBatis-Plus实现自动加密存储和查询自动解密
有的业务需要将敏感数据加密存储到 DB,如果我们每个都手动去加密,再设值,再保存 DB,不仅麻烦,还对开发者不友好,在 MyBatis-Plus 中我们可以使用 BaseTypeHandler 来解决这个问题 1、新增 TypeHandler import com.baomidou.mybatisplus.core.toolkit.AES; import com.b…...
[数仓]十二、离线数仓(Atlas元数据管理)
第1章 Atlas入门 1.1 Atlas概述 Apache Atlas为组织提供开放式元数据管理和治理功能,用以构建其数据资产目录,对这些资产进行分类和管理,并为数据分析师和数据治理团队,提供围绕这些数据资产的协作功能。 Atlas的具体功能如下: 元数据分类 支持对元数据进行分类管理,例…...
机器学习——决策树(笔记)
目录 一、认识决策树 1. 介绍 2. 决策树生成过程 二、sklearn中的决策树 1. tree.DecisionTreeClassifier(分类树) (1)模型基本参数 (2)模型属性 (3)接口 2. tree.Decision…...
翁恺-C语言程序设计-08-1. 求一批整数中出现最多的个位数字
08-1. 求一批整数中出现最多的个位数字 给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。 输入格式: 输入在第1行中…...
ROM修改进阶教程------深度解析小米设备锁机型不解锁bl 刷写特殊类固件的步骤
在玩机过程中会遇到很多自己机型忘记密码或者手机号不用导致机型出现账号锁。无法正常使用。那么此类机型如果无法正常售后解锁。只能通过第三方渠道。例如在早期小米机型有强解bl锁资源。然后刷入完美解锁包。这种可以登陆新账号。但后期新机型只能通过修改分区来屏蔽原设备锁…...
论文翻译 | LEAST-TO-MOST: 从最少到最多的提示使大型语言模型中的复杂推理成为可能
摘要 思维链提示(Chain-of-thought prompting)在多种自然语言推理任务上展现了卓越的性能。然而,在需要解决的问题比提示中展示的示例更难的任务上,它的表现往往不佳。为了克服从简单到困难的泛化挑战,我们提出了一种新…...
【区块链 + 智慧政务】都江堰区块链公共服务应用平台 | FISCO BCOS应用案例
都江堰区块链公共服务应用平台是四川开源观科技有限公司运用 FISCO BCOS 区块链技术为都江堰市建设的市级 区块链节点平台,该平台上线运营一年以来已在政务服务、社区养老和慈善公益领域落地 3 个应用,上链数据超 过 30 万条。 区块链 政务服务应用&am…...
Python从0到100(三十九):数据提取之正则(文末免费送书)
前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…...
redis redisson(仅供自己参考)
redis 通过setnx实现的分布式锁有问题 如图: 解决的新的工具为(闪亮登场):redisson redisson可重入锁的原理 实现语言lua: 加锁实现脚本语言: 释放锁的脚本语言: 加锁的lua -- 首先判断这个锁…...
【C语言初阶】探索编程基础:深入理解分支与循环语句的奥秘
📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C语言 “ 登神长阶 ” 🤡往期回顾🤡:C语言入门 🌹🌹期待您的关注 🌹🌹 ❀分支与循环语句 📒1.…...
ERP基础知识
ERP 一、概述 ERP是Event-related Potentials的简称。外加一种特定的刺激,作用于感觉系统或脑 的某一部位,在给予刺激或撤销刺激时,或和当某种心理因素出现时在脑区所产生的电位变化,成为事件相关电位,是一种特殊…...
C++是否可以使用.获取union、struct中的成员变量的地址
C可以使用.获取union、struct中的成员变量的地址 示例代码如下所示 #include <stdio.h> #include <stdint.h>struct u128 { uint64_t v64; uint64_t v0; };int main() {union { unsigned __int128 ui; struct u128 s; } union_temp_m128;void* p1 &union_te…...
【前端】包管理器:npm、Yarn 和 pnpm 的全面比较
前端开发中的包管理器:npm、Yarn 和 pnpm 的全面比较 在现代前端开发中,包管理器是开发者必不可少的工具。它们不仅能帮我们管理项目的依赖,还能极大地提高开发效率。本文将详细介绍三种主流的前端包管理器:npm、Yarn 和 pnpm&am…...
C++ 类和对象 赋值运算符重载
前言: 在上文我们知道数据类型分为自定义类型和内置类型,当我想用内置类型比较大小是非常容易的但是在C中成员变量都是在类(自定义类型)里面的,那我想给类比较大小那该怎么办呢?这时候运算符重载就出现了 一 运算符重载概念&…...
【Python实战因果推断】35_双重差分6
目录 Strict Exogeneity No Time Varying Confounders No Feedback No Carryover and No Lagged Dependent Variable Strict Exogeneity 严格的外生性假设是一个相当技术性的假设,通常用固定效应模型的残差来表示: 严格的异质性说明: 这…...
手把手教你用Python的basemap标注旅行足迹(含常见安装问题解决)
用Python绘制个性化旅行地图:从安装到创意标记全指南 每次翻开相册,那些泛黄的机票和模糊的景点门票总让我想起走过的路。但有没有更科技感的方式记录旅行足迹?今天我们就用Python的basemap工具,把你的旅行故事变成一幅交互式世界…...
vector收尾
vector深度剖析及模拟实现使用memcpy拷贝问题int main() { bite::vector<bite::string> v; v.push_back("1111"); v.push_back("2222"); v.push_back("3333"); return 0; }问题分析: memcpy是内存的二进制格式拷贝,…...
3步实现微信关系检测,让社交管理效率提升80%
3步实现微信关系检测,让社交管理效率提升80% 【免费下载链接】WechatRealFriends 微信好友关系一键检测,基于微信ipad协议,看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/WechatRealFriends 在数字社…...
KuiklyUI未来展望:2025路线图与技术演进趋势
KuiklyUI未来展望:2025路线图与技术演进趋势 【免费下载链接】KuiklyUI A Kotlin Multiplatform UI framework from Tencent TDS — high-performance, one codebase for six platforms, with dynamic delivery. 项目地址: https://gitcode.com/gh_mirrors/ku/Kui…...
如何选择最适合的自动化技术栈:FlaUI与UIA2/UIA3深度解析
如何选择最适合的自动化技术栈:FlaUI与UIA2/UIA3深度解析 【免费下载链接】FlaUI UI automation library for .Net 项目地址: https://gitcode.com/gh_mirrors/fl/FlaUI FlaUI作为一款强大的.NET UI自动化库,提供了对UIA2和UIA3两种技术标准的支持…...
Qwen3Guard安全模型HTTPS部署:保姆级Nginx反向代理配置指南
Qwen3Guard安全模型HTTPS部署:保姆级Nginx反向代理配置指南 1. 引言 1.1 为什么需要HTTPS部署 在当今数字化环境中,内容安全审核已成为各类在线平台的基础需求。Qwen3Guard作为阿里开源的安全审核模型,能够有效识别和过滤不安全内容。然而…...
LaTeX公式转Word工具:让学术写作告别格式困扰的Chrome扩展
LaTeX公式转Word工具:让学术写作告别格式困扰的Chrome扩展 【免费下载链接】LaTeX2Word-Equation Copy LaTeX Equations as Word Equations, a Chrome Extension 项目地址: https://gitcode.com/gh_mirrors/la/LaTeX2Word-Equation 在学术研究和论文撰写过程…...
终极指南:3步快速解锁《艾尔登法环》帧率限制与游戏优化
终极指南:3步快速解锁《艾尔登法环》帧率限制与游戏优化 【免费下载链接】EldenRingFpsUnlockAndMore A small utility to remove frame rate limit, change FOV, add widescreen support and more for Elden Ring 项目地址: https://gitcode.com/gh_mirrors/el/E…...
seo综合查询工具和网站分析工具有什么区别_seo综合查询工具如何分析网站关键词排名
SEO综合查询工具和网站分析工具有什么区别 在当今的数字营销环境中,SEO(搜索引擎优化)工具是企业和营销人员提升网站排名的关键。其中,SEO综合查询工具和网站分析工具虽然都在帮助提升网站的搜索引擎排名,但它们之间有…...
阿里达摩院神器实测:RexUniNLU开箱即用,智能客服理解力飙升
阿里达摩院神器实测:RexUniNLU开箱即用,智能客服理解力飙升 1. 开箱体验:零样本理解模型初探 1.1 一键部署的便捷性 RexUniNLU镜像的部署过程简单到令人惊讶。启动后访问7860端口,一个清爽的Web界面立即呈现在眼前。界面分为三…...
