現象:GridView 本想顯示 a1、a2、a3 三張圖,結果全是 a3。代碼核心片段:
Map map = new HashMap<>();
map.put("圖片", R.drawable.a1); list.add(map);
map.put("圖片", R.drawable.a2); list.add(map); // 同一 map 對象!
map.put("圖片", R.drawable.a3); list.add(map);
list 中添加的是同一個 Map 對象的引用。後兩次 put 覆蓋了同一個 key,最終 list 裡三個引用指向同一個 Map,值都是最後一次 put 的 a3。SimpleAdapter 讀取時自然全顯示 a3。
List
public class ImageItem {
private int resId;
public ImageItem(int resId) { this.resId = resId; }
public int getResId() { return resId; }
}
// 構建數據
List data = Arrays.asList(
new ImageItem(R.drawable.a1),
new ImageItem(R.drawable.a2),
new ImageItem(R.drawable.a3)
);
// 自定義 BaseAdapter 綁定
// 或用 RecyclerView + ViewHolder 更現代
from 數組 key 必須與 Map key 完全一致(區分大小寫)。to 數組對應布局文件中的 View id,類型為 int[] 而非 Integer[]。R.drawable.xxx (int),不要用 "R.drawable.xxx" (String)。記住:List 裡存的是引用,Map 是可變對象,循環復用同一 Map 等於自我覆蓋,這是 Java 集合框架最經典的淺拷貝坑。