Android中的适配器,你知道是做什么的吗?
😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD,日常还会涉及Android开发工作。
如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。 😊 座右铭:不想当开发的测试,不是一个好测试✌️。
热衷分享,喜欢原创,如果觉得博主的文章还不错的话,还请点赞、收藏哦!👍
番外
对了,如果你需要算力,那么这篇文章一定对你有用哦!东方国信“幕僚智算”算力云。
文章目录
- 一 收获
- 二 适配器简介
- 三 适配器的主要职责
- 四 Android中适配器的实现类
- 五 适配器的简单使用
一 收获
通过本篇文章您将了解到 Android 中适配器
(Adapter
)的作用、常见适配器实例及适配器的简单使用。
二 适配器简介
适配器
是一种用于提供数据和管理视图展示的组件,适配器充当数据源与显示视图之间的桥梁,它负责将数据转换为适合显示在用户界面上的视图,并将用户界面上的操作反馈回数据源。
适配器在许多 UI 组件中起到重要的作用,最常见的是在 ListView
、RecyclerView
、Spinner
等控件中使用。
三 适配器的主要职责
适配器的主要职责包括以下几个方面:
- 数据绑定:适配器负责将数据源中的数据与视图进行绑定。它将数据源中的每个项(例如,列表中的一项)与视图的子项进行关联。
- 创建视图:适配器负责根据定义的布局文件创建视图。它会根据数据源的项数动态创建视图,并为每个视图设置相应的数据。
- 视图重用:为了提高性能和节省内存,适配器会利用视图的重用机制。当滚动列表或回收视图时,适配器会重用之前创建的视图,而不是每次都创建新的视图。
- 提供数据数量:适配器会告知 UI 组件有多少个数据项需要展示。这个信息用于确定 UI 组件的大小和滚动范围。
- 事件处理:适配器可以处理用户与视图的交互事件,例如点击列表项或选择下拉列表中的项,并在事件发生时更新数据源。
四 Android中适配器的实现类
ArrayAdapter
:用于将数据与 ListView 或 Spinner 组件进行绑定的适配器。它使用数组或列表作为数据源,并将每个数据项与系统提供的默认布局(例如android.R.layout.simple_list_item_1
)进行绑定。- BaseAdapter:这是一个抽象类,提供了实现自定义适配器的基本骨架。继承 BaseAdapter 可以实现更灵活和自定义的适配器。它需要开发人员自行实现一些方法,如
getView
、getCount
、getItem
和getItemId
等。- RecyclerView.Adapter:用于将数据与 RecyclerView 组件进行绑定的适配器。RecyclerView 是一个更灵活和高度可定制的列表视图,适配器是实现 RecyclerView 的关键组件。RecyclerView.Adapter 需要开发人员自行实现一些方法,如
onCreateViewHolder
、onBindViewHolder
和getItemCount
等。- PagerAdapter:用于将数据与 ViewPager 组件进行绑定的适配器。ViewPager 是一个可滑动的视图容器,PagerAdapter 用于提供 ViewPager 的页面内容。PagerAdapter 需要开发人员自行实现一些方法,如
instantiateItem
、destroyItem
和getCount
等。
五 适配器的简单使用
根据不同的 UI 组件和需求,Android 提供了各种类型的适配器的实现类,,例如 ArrayAdapter
、BaseAdapter
、RecyclerView.Adapter
等。当使用 Kotlin 实现 Android 中的适配器时,可以通过继承现有的适配器类或实现适配器接口来创建自定义适配器。
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import android.widget.TextViewclass CustomAdapter(context: Context, private val data: List<String>) :ArrayAdapter<String>(context, 0, data) {override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {var itemView = convertViewif (itemView == null) {itemView = LayoutInflater.from(context).inflate(R.layout.list_item_layout, parent, false)}val fruitNameTextView = itemView?.findViewById<TextView>(R.id.fruitNameTextView)fruitNameTextView?.text = data[position]return itemView!!}
}
解析:
创建了一个名为 CustomAdapter 的自定义适配器类,它继承了ArrayAdapter
类,并重写 getView
方法,这是适配器中的一个关键方法,用于设置每个列表项的布局和数据。
在 getView
方法中,首先获取或创建一个 itemView
,它是每个列表项的根视图。然后,我们通过调用 findViewById
来获取到自定义布局中的 TextView
控件,并将对应列表项的数据设置到 TextView
中。最后,我们返回 itemView
。
val fruits = listOf("Apple", "Banana", "Orange", "Watermelon")
val adapter = CustomAdapter(this, fruits)
listView.adapter = adapter
请注意,CustomAdapter 类继承自 ArrayAdapter<String>
,并将数据源 data 传递给父类的构造函数。
对于适配器的具体使用可参考 ListView 或者 RecyclerView 相关文章。
相关文章:
Android中的适配器,你知道是做什么的吗?
😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD,日常还会涉及Android开发工作。 如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起…...

GitHub详解:代码托管与协作开发平台
文章目录 一、GitHub简介二、GitHub的核心功能2.1 仓库(Repository)2.2 版本控制与分支(Branch)2.3 Pull Request2.4 Issues与Projects2.5 GitHub Actions 三、GitHub的使用方法3.1 注册与登录3.2 创建和管理仓库3.3 使用Git进行代…...

【植物大战僵尸杂交版】获取+存档插件
文章目录 一、还记得《植物大战僵尸》吗?二、在哪下载,怎么安装?三、杂交版如何进行存档功能概述 一、还记得《植物大战僵尸》吗? 最近,一款曾经在15年前风靡一时的经典游戏《植物大战僵尸》似乎迎来了它的"文艺复…...
BP神经网络与反向传播算法在深度学习中的应用
BP神经网络与反向传播算法在深度学习中的应用 在神经网络的发展历史中,BP神经网络(Backpropagation Neural Network)占有重要地位。BP神经网络通过反向传播算法进行训练,这种算法在神经网络中引入了一种高效的学习方式。随着深度…...

【数据结构与算法】插入排序
💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《数据结构与算法》 期待您的关注 ...

MySQL如何实现数据排序
根据explain的执行计划来看,MySQL可以分为索引排序和filesort 索引排序 如果查询中的order by字句包含的字段已经在索引中,且索引的排列顺序和order by子句一致,则可直接利用索引进行排序,由于索引有序,所以排序效率…...

给我的 IM 系统加上监控两件套:【Prometheus + Grafana】
监控是一个系统必不可少的组成部分,实时,准确的监控,将会大大有助于我们排查问题。而当今微服务系统的话有一个监控组合很火那就是 Prometheus Grafana,嘿你别说 这俩兄弟配合的相当完美,Prometheus负责数据采集&…...

【Python】基于动态规划和K聚类的彩色图片压缩算法
引言 当想要压缩一张彩色图像时,彩色图像通常由数百万个颜色值组成,每个颜色值都由红、绿、蓝三个分量组成。因此,如果我们直接对图像的每个像素进行编码,会导致非常大的数据量。为了减少数据量,我们可以尝试减少颜色…...

【做一道算一道】和为 K 的子数组
给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1: 输入:nums [1,1,1], k 2 输出:2 示例 2: 输入:nums [1,2,3],…...
Facebook应用开发:认证与授权登录流程详解
Facebook作为全球最大的社交平台之一,提供了强大的认证与授权机制,允许第三方应用通过Facebook登录来简化用户的注册和登录流程。本文将详细介绍Facebook应用开发中的认证和授权登录流程,以及如何在应用中实现这一功能。 关键词 Facebook登…...

实战:搭建一款属于自己的个人知识库~docusaurus(强大且丝滑)-2024.7.7(测试成功)
目录 文章目录 目录docusaurus简介效果专题链接👏环境源码1、安装基础环境2、拉取代码3、安装坚果云并同步md核心文件4、构建运行5、配置脚本环境1.配置vscode终端到ecs的免密2.配置win10 vscode终端环境变量 6、构建并推送静态文件到ecs关于我最后最后 docusaurus简…...

Java教程之IO模式精讲,NIO+BIO
第一章 BIO、NIO、AIO介绍 背景 在java的软件设计开发中,通信架构是不可避免的,我们在进行不同系统或者不同进程之间的数据交互,或 者在高并发下的通信场景下都需要用到网络通信相关的技术,对于一些经验丰富的程序员来说&#x…...

如何让代码兼容 Python 2 和 Python 3?Future 库助你一臂之力
目录 01Future 是什么? 为什么选择 Future? 安装与配置 02Future 的基本用法 1、兼容 print 函数 2、兼容整数除法 3、兼容 Unicode 字符串 03Future 的高级功能 1. 处理字符串与字节 2. 统一异常处理…...

AI让大龄程序员重新焕发活力
AI是在帮助开发者还是取代他们? 在软件开发领域,生成式人工智能(AIGC)正在改变开发者的工作方式。无论是代码生成、错误检测还是自动化测试,AI工具正在成为开发者的得力助手。然而,这也引发了对开发者职业…...
Python在现代办公自动化中的应用:会不会被裁?就看你的效率了!
Python在现代办公自动化中的应用:提升效率的艺术 Python,作为一门简洁而强大的编程语言,已经成为许多办公室英雄优化日常工作的秘密武器。本文将带你探索Python如何在办公自动化领域大放异彩,并且会巧妙融入开源神器PlugLink&…...

Laravel5+mycat 报错 “Packets out of order”
背景 近期对负责项目,配置了一套 主从复制的 MySQL 集群 使用了中间件 mycat 但测试发现,替换了原来的数据连接后,会出现 Packets out of order 的报错 同时注意到,有的框架代码中竟然也会失效,比如 controller 类中&…...
使用androidx.appcompat:appcompat:1.7.0无法运行的问题
问题: 使用 implementation ‘androidx.appcompat:appcompat:1.7.0’ 出现无法运行的问题,编译都没有问题 AGPBI: {“kind”:“error”,“text”:“java.lang.NullPointerException”,“sources”:[{“file”:“C:\Users\10557\.gradle\caches\transfor…...

基于Java的水果商品销售网站
1 水果商品销售网站概述 1.1 课题简介 随着电子商务在当今社会的迅猛发展,水果在线销售已逐渐演变为一种极为便捷的购物方式,日益受到人们的青睐。本系统的设计初衷便是构建一个功能完备、用户体验友好的水果销售平台,致力于为用户提供优质、…...

Redis 线程模型
0、参考 【Redis线程模型】 【big key 排查和解决思路】 1、 Redis 单线程的理解 为什么单线程:CPU不是性能瓶颈(内存和网络),单线程能够达到业务要求 网络IO和键值对读写都是由一个线程完成的 2、 Redis 多线程的理解 持久化…...

栈和队列---循环队列
1.循环队列的出现 (1)上面的这个就是一个普通的数据的入队和出队的过程我们正常情况下去实现这个入队和出队的过程,就是这个数据从这个队尾进入,从队头离开,但是这个加入的时候肯定是没有其他的问题的,直接…...

51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...

23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...

Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...

蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...