Android Adapter 是将数据绑定到UI 界面上的桥接类。 Adapter负责创建和显示每个项目的子View和提供对下层数据的访问。支持Adapter绑定的UI控件必须扩展Adapter View抽象类。创建自己的继承自AdapterView的控件和创建新的Adapter类来绑定它们是可能的。
Android 系统本身提供了两种现成的Adapter 供我们使用。
1.ArrayAdapter:它是一个绑定View到一组对象的通用类。默认情况下,ArrayAdapter绑定每个对象的toString值到layout中预先定义的TextView空间上。构造函数允许用户使用更加复杂的Layout或者通过重写getView方法来扩展类从而使用TextView的替代物
2.SimpleCursorAdapter:它绑定View到Content Provider 查询返回的游标上。指定一个XML layout定义,然后将数据集的每一列的值绑定到layout中的一个View
写自己的Adapter类实现更多复杂的UI界面和数据绑定
public class MyAdapter extends SimpleAdapter {
private LayoutInflater mInflater;
private Context context;
private List<Map<String,Object>> list;
private int resource;
private String[] tags;
private int[] ids;
public MyAdapter(Context context, List<Map<String,Object>> items, int resource,
String[] tags,int[] ids) {
super(context, items, resource, tags, ids);
this.mInflater = LayoutInflater.from(context);
this.context = context;
this.list = items;
this.resource = resource;
this.tags = tags;
this.ids = ids;
}
public int getCount() {
return list.size();
}
public Object getItem(int position) {
return list.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(final int position, View convertView, ViewGroup parent) {
convertView = super.getView(position, convertView, parent);
if (convertView == null) {
Toast.makeText(context, "this is null", 2000).show();
} else {
}
ImageView more = (ImageView) convertView.findViewById(R.id.iv_more);
more.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
Intent intent = new Intent(context, VehicleInfoActivity.class);
intent.putExtra("vehicleID", VehicleListActivity.idList.get(position));
intent.putExtra("CameraID", "0");
Toast.makeText(context, "sssssss", 2000).show();
context.startActivity(intent);
}
});
return convertView;
}
}
主要重载getCount 方法,getView方法 getItem方法 getItemId方法; 参数解析:context:传入的上下文Activity, items 绑定数据的列表, resource layout布局ID, tags 绑定数据的key, ids Item 中对应key的资源ID。 在getView中自定义Item里面的事件监听,自定义新的重载后的显示界面返回 convertView。 如果需要使用到父类SimpleAdapter 显示效果需要调用super.getView方法为 convertView 赋值。