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 严格的外生性假设是一个相当技术性的假设,通常用固定效应模型的残差来表示: 严格的异质性说明: 这…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...

五子棋测试用例
一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏,有着深厚的文化底蕴。通过将五子棋制作成网页游戏,可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家,都可以通过网页五子棋感受到东方棋类…...
【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解
一、前言 在HarmonyOS 5的应用开发模型中,featureAbility是旧版FA模型(Feature Ability)的用法,Stage模型已采用全新的应用架构,推荐使用组件化的上下文获取方式,而非依赖featureAbility。 FA大概是API7之…...
精益数据分析(98/126):电商转化率优化与网站性能的底层逻辑
精益数据分析(98/126):电商转化率优化与网站性能的底层逻辑 在电子商务领域,转化率与网站性能是决定商业成败的核心指标。今天,我们将深入解析不同类型电商平台的转化率基准,探讨页面加载速度对用户行为的…...