首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android SimpleAdapter 構造參數錯誤導致報錯的正確用法

     編輯:程式設計綜合問答

錯誤現象

SimpleAdapter adapter = new SimpleAdapter(
    this, list, R.layout.item, 
    new String[]{"圖片"}, 
    new Integer[]{R.id.image}); // 編譯報錯:構造方法不匹配

原因分析

  1. from/to 參數類型不匹配:from 是 String[] (Map 的 key),to 必須是 int[] (View 的 resource ID),不能用 Integer[]。
  2. 數據源結構錯誤:同一個 Map 反覆 put 同一 key,導致列表中所有項指向同一 Map 對象,且只有最後一個值生效。

正確構造代碼

// 1. 準備數據:每項獨立 Map
List> data = new ArrayList<>();
Map item1 = new HashMap<>();
item1.put("img", R.drawable.a1);
data.add(item1);

Map item2 = new HashMap<>();
item2.put("img", R.drawable.a2);
data.add(item2);

Map item3 = new HashMap<>();
item3.put("img", R.drawable.a1);
data.add(item3);

// 2. 構造 SimpleAdapter
SimpleAdapter adapter = new SimpleAdapter(
    this,                    // Context
    data,                    // List>
    R.layout.item,           // 每項佈局 resource ID
    new String[]{"img"},     // from: Map 中的 key
    new int[]{R.id.image}    // to: 佈局中 ImageView 的 ID (int[])
);

gridView.setAdapter(adapter);

關鍵點總結

參數類型說明
contextContext通常傳 this (Activity)
dataList<Map<String, ?>>每個 Map 對應一行,key 與 from 對應
resourceint單項佈局 layout resource ID
fromString[]Map 中的 key 名稱數組
toint[]目標 View 的 resource ID 數組 (必須是 int[])

進階:使用 ViewBinder 自定義綁定

adapter.setViewBinder(new SimpleAdapter.ViewBinder() {
    @Override
    public boolean setViewValue(View view, Object data, String textRepresentation) {
        if (view instanceof ImageView && data instanceof Integer) {
            ((ImageView) view).setImageResource((Integer) data);
            return true; // 已處理
        }
        return false; // 默認處理
    }
});

避免在 Map 中存資源 ID 時被 toString() 變成數字文本顯示在 TextView 上。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved