Android适配器(Adapter)的简单介绍

2023-11-04

        什么是适配器呢?顾名思义,就是把一些数据给弄得适当,适合以便于在View上显示。适配器就像显示器,把复杂的东西按人可以接受的方式来展现。可以说适配器就是数据和视图之间的桥梁,学好适配器还是非常重要的。

        适配器的工作原理:

        适配器是怎么处理得到的数据,并把它显示出来的呢?其实很简单,说白了适配器它也是一个类,在类里面它实 现了父类的这几个方法,我们拿ListView举例

        1.public int getCount() //得到数据的行数

        这个方法要返回你要添加进ListView里的东西的总数,也就是要告诉ListView,我添加进列表里的东西有多少,需要多长的列表。可能那么为什么不直接返回mListView的长度呢?原因就是我们的ListView可能会添加”头“和”尾“,来进行一些更新之类的交互,就像微博之类的下拉刷新或者到底后加载,所以干脆直接用我们添加的内容的长度

        2.public Object getItem(int position) //根据position得到某一个对象的实例

        ListView要加载内容,要获得内容才可以加载!这个方法就是要让ListView可以通过一个position来获得我们要添加在相应位置的内容的内容是什么?当然是刚才mArray里相应位置的东西了

        3.public long getItemId(int position) //得到某一条记录的ID

        返回一个item的id,由参数position决定是哪个id

        4.publicView getView(int position, View convertView, ViewGroup parent) //相比于其它几个方法这个方法是最重要的,它显式的定义了适配器将要以什么样的方式去显示我们所 填充的数据,在自定义的适配器里面我们通常会给它写个布局文件。

        这里面一般我们会怎么做呢?

        一般,我们添加到ListView里的每个View都是xml(布局文件)定义好的。一开始需要构造过来一个Context!

        当然,最后要return view,把这个我们包装好的View给回ListView,让它在列表里显示。

        下面是《Android第一行代码》117页的部分代码

 

        这个convertView, 从原理上讲 当ListView滑动的过程中 会有item被滑出屏而不再被使用,这时候Android会回收这个条目的view 这个view也就是这里的convertView ,当item1被移除屏幕的时候 我们会重新new一个View给新显示的item_new 而如果使用了这个convertView 我们其实可以复用它 这样就省去了new View的大量开销。

        下面是优化了一部分的代码,在《Android第一行代码》的119页

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android适配器(Adapter)的简单介绍 的相关文章

  • 使用动画更新布局

    我有一个继承自 LinearLayout 的自定义视图 它包含一个按钮 和一个编辑文本 EditText 的初始可见性设置为 GONE 什么时候 按下按钮我希望 EditText 出现动画效果 所以 我制作了一个 ScaleAnimatio
  • Android 键盘调整大小

    我正在开发一个应用程序 其中包含 Activity 和Fragment 在片段布局中 我使用相对布局作为父布局 底部和滚动视图之间的一个按钮 Scrollview包含编辑文本框 如果我点击最后一个editTextBox在滚动视图中我的键盘隐
  • 为什么我可以使用 Application 作为 ViewModelComponent 和 Hilt 中的默认绑定?

    来自article https developer android com training dependency injection hilt android component default 我知道每个 Hilt 组件都带有一组默认绑
  • Cordova 插件回调使用什么线程?

    方法在哪个线程中CallbackContext https github com apache cordova android blob master framework src org apache cordova CallbackCon
  • 安卓。 onEditorAction 从未被调用

    我正在尝试捕捉从屏幕上移除键盘的事件 并且我正在使用OnEditorActionListener班级 然而 其onEditorAction方法永远不会被调用 这是我的 XML 格式的 EditText
  • Oreo (8.1) 无法在锁定屏幕上启动活动

    我正在开发 NFC 支付应用程序 即使设备锁定 屏幕打开时也可以付款 与 Android Pay 的行为基本相同 付款后 我想向用户显示胜利屏幕 通知他付款结果 完成 错误 PIN 请求等 我将其添加到清单中
  • 如何从 Android 中的 DatePicker 小部件获取日期?

    I use a DatePickerAndroid中的小部件供用户设置日期 并希望在单击确认按钮时获取日期值 我该怎么做 尝试这个 DatePicker datePicker DatePicker findViewById R id dat
  • 使用 notificationManager.getActiveNotifications() 获取状态栏通知

    我正在使用以下方式获取所有状态栏通知notificationManager getActiveNotifications 但它只是返回应用程序锁定的通知 每当在什么应用程序或任何其他应用程序中发生通知时 此功能不会向我提供其他应用程序的主动
  • Android Market支持QHD

    使用摩托罗拉 Atrix 4G 无法下载我发布的应用程序并安装在手机上 建议的答案是这样做
  • 将 Cordova console.log 写入文件

    有谁知道是否有可能console log写入文件或类似的东西 我已经记录了我的应用程序 但它仅写在控制台上 出于远程目的debugging我也需要将现有日志写入文件 我想创建一个文件并将日志写入该文件中 但这将使我复制现有的日志代码 因此
  • 如何在Android中绘制钟形曲线?

    我正在尝试在 Android 中绘制钟形曲线 正态分布 我使用这个方程 自己增加x轴并获得相对于x轴的y轴坐标 for int i 0 i lt 1000 i x float i 0 5 yy float 1 Math sqrt 0 5 M
  • 在 AChartEngine 中单击时突出显示饼图切片

    我想在用户单击时突出显示 更改颜色 饼图特定切片 我可以在示例 下面的代码 中发现可以显示切片的索引和确切的点 但是给切片重新着色怎么样 mChartView setOnClickListener new View OnClickListe
  • Android Studio 无法识别 GSON 库

    我正在 Android Studio 中制作一个应用程序 我需要使用GSON图书馆 我已经下载了gson 2 8 2 javadoc 然后我就这样走了 文件 gt 新建 gt 新模块 gt 导入 JAR AAR 打包 gt gson 2 8
  • 如何限制 Android 设备网络速度以进行测试

    我正在测试一个 Android 应用程序 该应用程序在低质量网络上管理其内容时遇到一些问题 我无法验证问题是否仍然存在 因为以我家的网络速度 120mb s 在我设法开始复制路线之前 所有内容都已经下载完毕 在这种情况下 不能选择使用 An
  • 如何在 Android 设备(平板电脑和手机)方向更改时获得正确的窗口宽度

    我正在尝试使用 jquery 函数计算 Android 设备方向变化时的窗口宽度 window outerWidth true 此计算给出了两个方向变化的正确宽度iphone and ipad但在安卓中不行 如果我最初以横向模式或纵向模式加
  • 如何在运行时将元数据信息写入Android Manifest

    我知道可以编辑 Android 清单组件 例如 将其设置为启用 禁用等 我想在运行时将元值标签插入到 Android 清单的应用程序标签中 我怎样才能直接写入android清单 这是我想直接写入我的应用程序的 Android 清单中的字符串
  • 我的应用程序未列出用于平板电脑

    我已将一个新应用程序上传到 play google com https play google com store apps details id development nk anguide https play google com s
  • 如何将我的自定义相机应用程序设置为默认应用程序?

    如果我使用以下代码 Intent takePictureIntent new Intent MediaStore ACTION IMAGE CAPTURE startActivityForResult takePictureIntent 1
  • Camera中添加Camera的Zoom控件

    我正在制作一个相机应用程序 其中我使用 Surface View 作为相机和所有其他东西 我从以下链接中获取了指南 http www brighthub com mobile google android articles 43414 as
  • Android:如何以编程方式仅圆化位图的顶角?

    我目前正在使用这段代码 Override public Bitmap transform Bitmap source Bitmap result Bitmap createBitmap source getWidth source getH

随机推荐

  • 【数字调制】数字调制技术FSK与PSK分析与研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 上世纪 50 年代末 出现了 FSK 与二
  • nodejs安装及一些问题

    安装 nodejs 官方地址 https nodejs org zh cn 跟着一直下一步 中途改一下安装位置 最后 安装完毕后 用node v测试 如果没找到批处理文件 那么就手动检查下以下几个地方 2 更改缓存的位置 之后我们要找到np
  • java: create pdf using itextpdf 5.2.1 Library

    版权所有 2021 涂聚文有限公司 许可信息查看 描述 数据库 Ms SQL server 2019 IDE Eclipse IDE for Enterprise Java and Web Developers 2021 09 OS Win
  • python建包,导包

    查找Python模块的存储位置 Python会从下面的路径中搜索有没有对应的模块 一般来说 模块最佳存放路径是site packages 如果以上路径没有相关模块 那么就会导入失败 解决办法 将该模块所在路径加入sys path中 3 创建
  • ImageView/TextView内容无法动态更新问题

    今天在添加功能的过程中遇到了一个ImageView及TextView在收到回调的内容后 通过handler sendEmptyMessageDelayed COMPLETED 100 在handleMessage方法里做tv settext
  • 04---------Git查看某一个文件的历史提交信息

    一 查看提交记录 1 git log git log 命令是查看全部提交日志 git log p 查看历史纪录以来哪几行被修改 git log oneline 查看历史提交日志 单行显示 git reflog 跟git log 一样 2 g
  • 计算机中丢失MSVCR120.dll,找不到MSVCR120.dll怎么办呢?

    MSVCR120 dll是Windows操作系统的一个动态链接库文件 它是Microsoft Visual C 库的一部分 主要用于程序运行时的内存管理 异常处理和安全功能 这个库最初是为了开发Windows应用程序而设计的 可以为程序员提
  • pip与pip3的大概区别

    这里就简单给大家说明一下喽 我们知道python 有python2和python3的区别 那么当然pip也有pip和pip3的区别 pip是python的包管理工具 pip和pip3版本不同 都位于python的Scripts目录下 如图
  • selenium基础入门

    2020年的selenium比2015年进步了太多 稳定性和操控性都变好了 selenium是基于webdriver协议 几个概念 selenium webdriver chromedriver chrome chrome可以作为浏览器代表
  • sakila数据库介绍

    这里写自定义目录标题 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题 有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一个表格 设定内容居中 居左 居右 Sma
  • Spring IOC容器启动源码分析文字版

    Spring容器的refresh 创建刷新 1 prepareRefresh 刷新前的预处理 1 initPropertySources 初始化一些属性设置 子类自定义个性化的属性设置方法 2 getEnvironment validate
  • java字符串大写转小写,小写转大写

    JAVA中String类提供了转大写的方法toUpperCase 和转小写的方法toLowerCase 使用如下 String a ABC system out println a toLowerCase abc String b abc
  • Hive

    hive是基于Hadoop的一个数据仓库工具 可以将结构化的数据文件映射为一张数据库表 并提供简单的sql查询功能 可以将sql语句转换为MapReduce任务进行运行 其优点是学习成本低 可以通过类SQL语句快速实现简单的MapReduc
  • cnpm、vue、vue-cli全局安装

    cnpm安装
  • ESP-NOW无线通信

    本文由铁熊与默联合创作 在学习 Arduino 开发的过程中 无线通讯是我们学习道路上一道必过的坎 无线通讯摆脱了线材的束缚 使用更加灵活且通讯距离根据不同无线模块可达几十米甚至是数公里 常见的无线通讯方式有蓝牙 WiFi LoRa NB
  • C++十种排序方法(快速排序、冒泡排序等等)

    C 十种排序方法 快速排序 冒泡排序等等 一 冒泡排序 1 概念及思路 冒泡排序顾名思义就是大的数沉下去 小的数浮上来 就跟气泡在水底浮上来一样 基本的思路很简单 就是相邻的两个数相比较 如果前面那个数比后面那个数大 则换位置 否则不需要换
  • innodb下的mvcc_浅谈MVCC

    简介 MVCC Multi Version Concurrency Control 即多版本并发控制 MVCC的实现原理 我们在了解MVCC之前 首先先了解一下几个比较常见的锁 读锁 也叫共享锁 S锁 若事务T对数据对象A加上S锁 则事务T
  • APISIX-dashboard安装篇

    一 简介 apisix dashboard是官方提供的web图形界面 可以方便的添加组件以及配置服务 适合我这种咸鱼使用 项目地址 https github com apache apisix dashboard 二 安装 本文使用rpm的
  • showtext

    R语言绘图的字体设置是个老大难的问题 它默认情况下只提供三种字体 本篇推文介绍两种字体设置方法 针对Windows系统 一种是R语言本身的字体设置方法 另一种是showtext等工具包提供的相关方法 1 系统设置方法 1 1 原生样式 R语
  • Android适配器(Adapter)的简单介绍

    什么是适配器呢 顾名思义 就是把一些数据给弄得适当 适合以便于在View上显示 适配器就像显示器 把复杂的东西按人可以接受的方式来展现 可以说适配器就是数据和视图之间的桥梁 学好适配器还是非常重要的 适配器的工作原理 适配器是怎么处理得到的