安卓開發---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.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…