概念SimpleAdapter 是 Android 中比 ArrayAdapter 更强大的适配器,用于将复杂的数据绑定到复杂的布局,支持将 Map 中的数据映射到布局中的多个 View。

方法签名

public SimpleAdapter(
Context context, //上下文
List<? extends Map<String, ?>> data,//数据源int resource, //列表项视图id
String[] from,//数据键名int[] to //视图id
)

上下文提供应用环境信息。

数据源的数据类型必须为List<Map<String, Object>>,每个Map代表一个列表项的数据,String是数据字段的key,Object是对应的值。这里是填数据源的名字。

列表项视图ID就是子项视图的ID。

from 参数:指定Map中要使用的key名称

to参数:指定布局中View的id,对应着from中的key

优点

显示更多信息:同时显示设备名称、MAC地址、信号强度

更好的用户体验:丰富的视觉信息

灵活的数据展示:支持文本、图片等多种数据类型

缺点

对于非常大量的数据,性能可能不如 RecyclerView

功能有限:不支持复杂的交互逻辑

布局限制:只能进行简单的数据映射,不能处理复杂的布局逻辑

工作流程的详细讲解:

1.先初始化数据列

List<Map<String, Object>> data = new ArrayList<>();

2.往列表里面添加数据

根据数据列表,声明一个Map接口类型的变量item1,指定键为String,值为Object。 实例化一个HashMap对象并赋值给item1变量,用于存储键值对数据。用Map的put方法把数据添加进Map,再用List的add方法把这个Map对象放入List中。

        Map<String, Object> item1 = new HashMap<>();item1.put("name", "苹果");item1.put("image", R.drawable.apple);data.add(item1);Map<String, Object> item2 = new HashMap<>();item2.put("name", "香蕉");item2.put("image", R.drawable.banana);data.add(item2);Map<String, Object> item3 = new HashMap<>();item3.put("name", "橙子");item3.put("image", R.drawable.orange);data.add(item3);Map<String, Object> item4 = new HashMap<>();item4.put("name", "草莓");item4.put("image", R.drawable.strawberry);data.add(item4);

3.定义数据到视图的映射关系

告诉适配器,数据中的"image"键对应布局中的图片控件,"name"键对应布局中的文本控件。这样适配器就能自动完成数据到界面的绑定。

String[] from = {"image", "name"};//from数组中的每个元素都是一个字符串,对应数据集合中 Map 的键。
int[] to = {R.id.imageView, R.id.textView};//to数组中的每个元素都是一个视图 ID(整数类型),对应布局文件中的控件 ID。

4.创建SimpleAdapter

直接填写相关参数

SimpleAdapter adapter = new SimpleAdapter(this,//上下文data,//数据R.layout.list_item,//子项视图from,//数据键名to//视图id);

5.获取ListView并设置适配器

ListView listView = findViewById(R.id.listView);
listView.setAdapter(adapter);

代码示例:

MainActivity.java

package com.example.test;import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 准备数据List<Map<String, Object>> data = new ArrayList<>();// 添加水果数据Map<String, Object> item1 = new HashMap<>();item1.put("name", "苹果");item1.put("image", R.drawable.apple);data.add(item1);Map<String, Object> item2 = new HashMap<>();item2.put("name", "香蕉");item2.put("image", R.drawable.banana);data.add(item2);Map<String, Object> item3 = new HashMap<>();item3.put("name", "橙子");item3.put("image", R.drawable.orange);data.add(item3);Map<String, Object> item4 = new HashMap<>();item4.put("name", "草莓");item4.put("image", R.drawable.strawberry);data.add(item4);// 定义数据到视图的映射关系//告诉适配器,数据中的"image"键对应布局中的图片控件,"name"键对应布局中的文本控件。这样适配器就能自动完成数据到界面的绑定。String[] from = {"image", "name"};//from数组中的每个元素都是一个字符串,对应数据集合中 Map 的键。int[] to = {R.id.imageView, R.id.textView};//to数组中的每个元素都是一个视图 ID(整数类型),对应布局文件中的控件 ID。// 创建SimpleAdapterSimpleAdapter adapter = new SimpleAdapter(this,//上下文data,//数据R.layout.list_item,//子项视图from,//数据键名to//视图id);// 获取ListView并设置适配器ListView listView = findViewById(R.id.listView);listView.setAdapter(adapter);}
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:padding="16dp"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="水果列表"android:textSize="24sp"android:layout_gravity="center_horizontal"android:layout_marginBottom="16dp"/><ListViewandroid:id="@+id/listView"android:layout_width="match_parent"android:layout_height="match_parent"/>
</LinearLayout>

list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"android:padding="8dp"><ImageViewandroid:id="@+id/imageView"android:layout_width="60dp"android:layout_height="60dp"android:scaleType="centerCrop"android:paddingRight="16dp"/><TextViewandroid:id="@+id/textView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="18sp"android:layout_gravity="center_vertical"/>
</LinearLayout>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/95059.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/95059.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/95059.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软考-系统架构设计师 办公自动化系统(OAS)详细讲解

个人博客&#xff1a;blogs.wurp.top 一、OAS的核心概念与演进 1. 什么是OAS&#xff1f; OAS是一个综合性的信息系统&#xff0c;它利用计算机技术、通信技术、系统科学和行为科学&#xff0c;为组织的日常办公事务、信息管理和协同工作提供支持。其本质是将传统办公流程电…

leetcode 155 官方golang标准答案错误

真是误人子弟&#xff0c;leetcode155题官网的golang答案是错误的。push方法的append操作&#xff0c;必然不能保证是o(1)的时间复杂度。就这还是官网的标准答案&#xff0c;就这水平&#xff0c;&#x1f604;leetcode误人子弟不是第一次了。光会刷算法&#xff0c;可惜水平还…

开源 python 应用 开发(十三)AI应用--百度智能云TTS语音合成

最近有个项目需要做视觉自动化处理的工具&#xff0c;最后选用的软件为python&#xff0c;刚好这个机会进行系统学习。短时间学习&#xff0c;需要快速开发&#xff0c;所以记录要点步骤&#xff0c;防止忘记。 链接&#xff1a; 开源 python 应用 开发&#xff08;一&#xf…

大白话说 AI 编程 Trae,小白进!

大家好&#xff0c;我是樱木。 一些小白用户&#xff0c;打开字节出的 AI 编程工具 Trae 时&#xff0c;可能觉得还是有点生疏&#xff0c;但是作为程序员&#xff0c;看到这样的界面分布&#xff0c;已经是在熟悉不过了&#xff0c;甚至心中窃喜&#xff0c;长得和 IDEA 等开…

主流国产数据库:文档完备性

官方文档通常是用户获取数据库产品相关信息最权威的渠道&#xff0c;文档的完备性&#xff08;准确、全面、易用&#xff09;直接影响着开发者的学习成本、项目实施的效率以及后期的运维便利性。 例如&#xff0c;Oracle 数据库的官方文档被广泛认为是行业的黄金标准&#xff…

现今流行的操作系统及其应用场景

2025 年主流操作系统及其应用场景&#xff0c;结合技术趋势与行业实践&#xff0c;涵盖从个人设备到关键基础设施的全场景覆盖&#xff1a;一、桌面与生产力领域1. Windows 11/12&#xff08;微软&#xff09;市场地位&#xff1a;全球桌面市场占比 71%&#xff0c;企业级场景市…

IP v 6

相关概念地址长度128bit&#xff0c;采用冒号划分为8段&#xff0c;并用16进制标识&#xff0c;其容量大到能为地球上的每一粒沙子分配一个地址&#xff0c;通常情况下其网络前缀为64位&#xff0c;接口标识为64位&#xff0c;依照写法可分为首选格式&#xff0c;即完整书写&am…

Elasticsearch冷热架构:性能与成本完美平衡

Elasticsearch 的冷热架构&#xff08;Hot-Warm-Cold Architecture&#xff09;是一种针对时序数据&#xff08;如日志、指标等&#xff09;的成本与性能优化方案&#xff0c;通过将数据在不同生命周期的存储需求分层处理&#xff0c;兼顾性能、容量和成本。其核心思想是&#…

【MFC自动生成的文件详解:YoloClassMFC.cpp 的逐行解释、作用及是否能删除】

大家好&#xff0c;欢迎来到我的MFC编程入门系列。上次我们聊了MFC项目创建后的核心文件区别&#xff08;项目名.cpp、.h、Dlg.cpp 和 Dlg.h&#xff09;&#xff0c;今天针对读者的反馈&#xff0c;专门来拆解其中最重要的一个文件&#xff1a;项目名.cpp&#xff08;这里以用…

玄机靶场 | 冰蝎3.0-jsp流量分析

文章目录一、冰蝎3.0流量特征二、索引三、题目列表步骤#1黑客IP是什么&#xff1f;步骤#2黑客上传的Webshell名是什么&#xff1f;步骤#3黑客上传WebShell的时间是多少&#xff1f;&#xff08;格式如&#xff1a;flag{YYYY-MM-DD HH:MM:SS}&#xff09;步骤#4木马的解密key是什…

基于物理信息神经网络(Physics-Informed Neural Network, PINN)的三维热传导方程求解器MATLAB

代码实现了一个基于物理信息神经网络&#xff08;Physics-Informed Neural Network, PINN&#xff09;的三维热传导方程求解器。以下是详细分析&#xff1a;&#x1f9e0; 一、主要功能 main.m&#xff1a; 构建一个全连接神经网络用于近似三维热传导方程的解 ( u(x, y, z, t) …

按钮计数器:jQuery / AngularJS / Vue / React / dagger.js 实现对比与技术解读

代码来源&#xff1a;https://codepen.io/dagger8224/pen/myeKgVQ 任务&#xff1a;实现“按钮点击 1”计数器&#xff0c;对比不同框架的写法与特性&#xff0c;并给出选型建议。 目录 代码解读&#xff08;逐框架&#xff09; jQuery&#xff08;命令式 DOM&#xff09;Angu…

useEffect中直接使用 await报错

在 useEffect 中直接使用 await 会报错&#xff0c;因为 useEffect 的回调函数不能是 async 函数。有几种正确的方式来处理异步操作&#xff1a; 方法一&#xff1a;在 useEffect 内部创建 async 函数并立即调用 这是最常用的方式。 import React, { useEffect } from react;co…

卷积神经网络为什么要填充(Padding)

填充&#xff08;Padding&#xff09;是卷积神经网络中一个至关重要且巧妙的设计。它的核心目的可以概括为&#xff1a;为了解决卷积操作导致的特征图尺寸缩小和边缘信息丢失问题。

C++ 并发编程:全面解析主流锁管理类

在 C 的并发世界里&#xff0c;管理共享资源就像是在一个繁忙的十字路口指挥交通。如果指挥不当&#xff0c;就会发生混乱甚至致命的“死锁”。C 标准库提供的各种锁管理工具&#xff0c;就是我们手中的“交通信号灯”&#xff0c;它们各自拥有独特的职能&#xff0c;帮助我们编…

Spring boot 启用第二数据源

1. 数据源配置代码&#xff1a;import com.alibaba.druid.pool.DruidDataSource; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilde…

Wi-Fi 时延与掉包的关键因素全解析

在无线网络性能优化中&#xff0c;时延&#xff08;Latency&#xff09;与掉包&#xff08;Packet Loss&#xff09;是最核心的两个指标。本文将从 物理层、MAC层、系统栈、业务形态与环境 等多个维度&#xff0c;对 Wi-Fi 时延与掉包的关键因素进行全面梳理&#xff0c;并结合…

《Python 文本分析实战:从单词频率统计到高效可视化的全流程指南》

《Python 文本分析实战:从单词频率统计到高效可视化的全流程指南》 一、引言:小任务背后的大世界 在我多年的开发与教学中,文本处理始终是一个绕不开的主题。无论是日志分析、自然语言处理,还是搜索引擎、推荐系统,几乎所有数据驱动的系统都离不开对文本的理解。而“统计…

12KM无人机高清图传通信模组——打造未来空中通信新高度

在无人机技术飞速发展的今天&#xff0c;高清图传和稳定的通信模块无疑是提高无人机作业效率和可靠性的关键因素。作为新一代无人机核心技术之一&#xff0c;深圳云望物联12KM无人机高清图传通信模组凭借其卓越的性能&#xff0c;正逐步成为行业内的宠儿&#xff0c;成为无人机…

【LeetCode 热题 100】62. 不同路径——(解法二)递推

Problem: 62. 不同路径 文章目录整体思路完整代码时空复杂度时间复杂度&#xff1a;O(m * n)空间复杂度&#xff1a;O(m * n)整体思路 这段代码同样旨在解决 “不同路径” 问题&#xff0c;但它采用的是一种 自底向上&#xff08;Bottom-Up&#xff09;的动态规划 方法&#x…