当前位置: 首页 > news >正文

安卓开发---SimpleAdapter

概念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.dtcms.com/a/356184.html

相关文章:

  • 不同卷积不同的滤波效果
  • 如何将OFD文件转换为PDF?总结在线OFD转PDF方法
  • QT5.14.2、CMake 扩展openCV
  • GPT-5原理
  • 第二章 Vue + Three.js 实现鼠标拖拽旋转 3D 立方体交互实践
  • Python- Visual Studio Code配置Anaconda
  • WebIDEPLOY 赋能数字校园建设:智慧管理系统的效能升级与实践路径 —— 以校园资源协同优化构建高效教育生态的探索
  • 洞悉核心,驭数而行:深入理解 Oracle SQL 优化器(RBO 与 CBO)的性能调优哲学
  • C# 一个投资跟踪程序的设计与实现:面向对象与设计模式的深度解析
  • ros、slam、激光雷达、自动驾驶相关学习内容和计划
  • 【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day15
  • PyTorch 机器学习基础(选择合适优化器)
  • 【Big Data】Alluxio 首个基于云的数据分析和开源AI数据编排技术
  • 补题报告08
  • 从零开始的云计算生活——第五十四天,悬梁刺股,kubernetes模块之组件与网络
  • 计算机是如何运行的
  • Kotlin 和 Java 的区别
  • 【Linux系统】线程控制
  • 《C++进阶之STL》【AVL树】
  • PlotJuggler如何安装和使用
  • JavaSE丨集合框架入门(二):从 0 掌握 Set 集合
  • DeepSeek大模型风靡云平台,百度智能云、阿里云、腾讯云等多个平台宣布上线DeepSeek模型
  • HGDB全文检索/中文分词的使用
  • 美食推荐|美食推荐小程序|基于微信小程序的美食推荐系统设计与实现(源码+数据库+文档)
  • 【项目思维】通过编写一个贪吃蛇小程序,并移植到嵌入式设备上,解析编程思维的本质
  • mysql中的通用语法及分类
  • Ubuntu下配置并远程连接MySQL
  • 平安养老险深分开展“金融护航,安居鹏城”新市民金融服务宣传活动
  • Unity+URP+WebGL抗锯齿设置
  • MTK Linux DRM分析(二十二)- MTK mtk_drm_crtc.c(Part1)