1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
| ListView listView;
ListAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 中文内容数组,每个元素对应列表中的每一项的文字内容
String[] names = new String[]{"AAA", "BBB", "CCC", "DDD", "EEE", "FFF", "GGG", "HHH"};
// id 数组,每个 id 与本地图片资源一一对应,例如 R.drawable.a 对应 res/drawable/a.png
int[] images = new int[]{R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.d, R.drawable.e, R.drawable.f, R.drawable.g, R.drawable.h};
// 创建并准备初始化以 Map 对象为元素的 List 对象,这是调用 SimpleAdapter 类构造器所需的实参
List<Map<String, Object>> list = new ArrayList<>();
for (int i = 0; i < names.length; i++) {
// 创建一个 Map,循环中的每个 Map 对象都含有两个元素,一个表示列表中某一项的图片内容,一个表示列表中某一项的文字内容
Map<String, Object> map = new HashMap<>();
map.put("image", images[i]);
map.put("description", names[i]);
list.add(map);
}
// 通过 id 绑定 listView 组件到 listView 变量
listView = findViewById(R.id.listView);
/*
* 调用 SimpleAdapter 类的构造器
* 第一个参数 MainActivity.this 表示被适配的对象
* 第二个参数 list 给列表提供数据
* 第三个参数 R.layout.item 将适配器对象与 layout/item.xml 布局绑定
* 第四个参数 new String[]{"image", "description"} 告诉适配器如何从第二个参数 list 中获取数据,适配器访问 list 中的 Map 类型的元素,然后用数组(第四个参数)中的字符串元素作为 key 从每一个 map 中获取 value
* 第五个参数 new int[]{R.id.image, R.id.textView} 告诉适配器在用第二个参数和第四个参数配合下取出数据后绑定到哪些组件
* */
adapter = new SimpleAdapter(MainActivity.this, list, R.layout.item, new String[]{"image", "description"}, new int[]{R.id.image, R.id.textView});
// 将 listView 组件与适配器绑定
listView.setAdapter(adapter);
}
|