官方文档:
这是一个简单的适配器,可以将静态数据映射到XML文件中定义好的视图. 你可以将 Maps 的 ArrayList 指定为用于列表的数据. ArrayList 中的每一项对应列表中的一行. Maps 中包含用于一行的数据. 你也可以指定 XML 文件,其中定义了用于显示行的视图, 通过 Map 的关键字映射到指定的视图.绑定数据到视图分两个阶段. 首先,如果 SimpleAdapter.ViewBinder 是有效的,则调用 setViewValue(android.view.View, Object, String) 方法. 如果返回值为真,则执行绑定.如果返回值为假,则按以下顺序绑定视图:实现了 Checkable 的视图(例如 CheckBox),期望绑定值是布尔类型. TextView,期望绑定值是字符串类型,通过调用 setViewText(TextView, String) 绑定. ImageView,期望绑定值是资源 ID 或者一个字符串,通过调用 setViewImage(ImageView, int) 或 setViewImage(ImageView, String)绑定. 如果没有合适的绑定发生,将会抛出 IllegalStateException 异常.
Simple.java(activity代码)
package com.phpfs.simple.adapter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleAdapter;
public class Simple extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.simple);
ListView lv = (ListView) findViewById(R.id.listview1);
String[] from = { "name", "image", "but" };
int[] to = { R.id.text, R.id.image, R.id.button };
List> list = new ArrayList>();
for (int i = 0; i < 5; i++) {
Map m = new HashMap();
m.put("name", "Text" + i);
m.put("image", R.drawable.f001);
m.put("but", "Button" + i);
list.add(m);
}
// 额外增加一行
Map n = new HashMap();
n.put("but", "Button last");
n.put("image", R.drawable.ic_launcher);
list.add(n);
SimpleAdapter adapter = new SimpleAdapter(
this,//SimpleAdapter关联的View的运行环境
list, //一个Map组成的List。在列表中的每个条目对应列表中的一行,每一个map中应该包含所有在from参数中指定的键
R.layout.item, //一个定义列表项的布局文件的资源ID。布局文件将至少应包含那些在to中定义了的ID
from, //一个将被添加到Map映射上的键名
to//将绑定数据的视图的ID,跟from参数对应
);
lv.setAdapter(adapter);
}
}
Simple对应视图simple.xml代码
ListView一行视图item.xml代码
说明:item.xml中button中有这样一行代码,
android:focusable=”false”
这样的好处是button不会抢占一行的点击区域
显示效果如下:
SimpleAdapter简单用法