一般情况下,我们使用simpleAdapter时无须设置ViewBinder,比如下面的代码。因为每个item的元素都是可以用String作为参数来设置。
SimpleAdapter中的public void setViewImage (ImageView v, String value)和public void setTextView(TextView tv,String value)均是调用bindView去给ImageView设置图像或是给TextView设置文本值,但只有当ViewBinder不存在或者如果存在的ViewBinder无法处理绑定到ImageView或者TextView时才调用上述的那两个方法。
public class SimpleAdapterTest extends Activity
{
private String[] names = new String[]
{ "虎头", "弄玉", "李清照", "李白"};
private String[] descs = new String[]
{ "可爱的小孩", "一个擅长音乐的女孩"
, "一个擅长的文学的女性", "浪漫主义诗人"};
private int[] imageIds = new int[]
{ R.drawable.tiger , R.drawable.nongyu
, R.drawable.qingzhao , R.drawable.libai};
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 创建一个List集合,List集合的元素是Map
List<Map<String, Object>> listItems =
new ArrayList<Map<String, Object>>();
for (int i = 0; i < names.length; i++)
{
Map<String, Object> listItem = new HashMap<String, Object>();
listItem.put("header", imageIds[i]);
listItem.put("personName", names[i]);
listItem.put("desc", descs[i]);
listItems.add(listItem);
}
// 创建一个SimpleAdapter
SimpleAdapter simpleAdapter = new SimpleAdapter(this, listItems,
R.layout.simple_item,
new String[] { "personName", "header" , "desc"},
new int[] { R.id.name, R.id.header , R.id.desc });
ListView list = (ListView) findViewById(R.id.mylist);
// 为ListView设置Adapter
list.setAdapter(simpleAdapter);
// 为ListView的列表项单击事件绑定事件监听器
list.setOnItemClickListener(new OnItemClickListener()
{
// 第position项被单击时激发该方法。
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id)
{
System.out.println(names[position]
+ "被单击了");
}
});
list.setOnItemSelectedListener(new OnItemSelectedListener()
{
// 第position项被选中时激发该方法。
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id)
{
System.out.println(names[position]
+ "被选中了");
}
@Override
public void onNothingSelected(AdapterView<?> parent)
{
}
});
}
}
如果item中的元素不是通过String类型的参数设置,就需要提供ViewBinder接口。如下:
SimpleAdapter simpleAdapter = new SimpleAdapter(this, getData(),
R.layout.backup_restore_result_item, strings, ids);
mListView.setAdapter(simpleAdapter);
simpleAdapter.setViewBinder(new ViewBinder() {
@Override
public boolean setViewValue(View arg0, Object arg1, String arg2) {
// TODO Auto-generated method stub
if (arg0 instanceof ImageView && arg1 instanceof Drawable) {
ImageView view = (ImageView) arg0;
view.setImageDrawable((Drawable) arg1);
return true;
}
return false;
}
});
setViewValue有三个参数view,data,textRepresentation。
view 是你自定义布局中所有的组件,程序会遍历一边布局中的组件。
data是你传的list<map< ,="">>,程序会遍历每一项数据。