CursorAdapter继承于BaseAdapter,它是个虚类,它为cursor和ListView提供了连接的桥梁。
newView该函数第一次回调用后,如果数据增加后也会再调用,但是重绘是不会调用的。数据增加后,回调用该函数来生成与新增数据相对应的view。
bindView函数第一次回调用后,如果数据更新也会再调用,但重绘会再次调用的。
添加适配器 这样ListView就会显示出来
private ListView mListView;
adapter = new ConversationAdapter(this, null);
mListView.setAdapter(adapter);
CursorAdapter
private class ConversationAdapter extends CursorAdapter{
private LayoutInflater inflater; //获得上下文环境
public ConversationAdapter(Context context, Cursor c) {
super(context, c);
// TODO Auto-generated constructor stub
inflater = LayoutInflater.from(context);
}
//在适配器第一次适配时 调用的方法,通常在该方法里 完成控件的加载
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View view = inflater.inflate(R.layout.conversation_item, parent, false);
CheckBox checkbox = (CheckBox) view.findViewById(R.id.checkbox); //获得控件
view.setTag(checkbox);
return view;
}
//完成数据的绑定
public void bindView(View view, Context context, Cursor cursor) {
CheckBox checkbox = (CheckBox)view.getTag();
checkbox.setChecked(true);
}
}
BaseAdapter
将一组数据传到像ListView,getView()方法,它是将获取数据后的View组件返回
private final static int[] images = new int[]{R.drawable.a_f_inbox,R.drawable.a_f_outbox,R.drawable.a_f_sent,R.drawable.a_f_draft};
private final static int[] names = new int[]{R.string.inbox,R.string.outbox,R.string.sent,R.string.draft};
private final class FolderAdapter extends BaseAdapter{
public int getCount() {
return images.length; //控件总个数
}
public Object getItem(int position) {
return names[position]; //控件的名字
}
public long getItemId(int position) {
return position; //当前控件的位置
}
//这里完成获得和绑定
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
FolderViews views = null;
if(convertView != null){
view = convertView;
views = (FolderViews) view.getTag();
}else{
view = getLayoutInflater().inflate(R.layout.folder_item, parent, false);
views = new FolderViews();
views.header = (ImageView) view.findViewById(R.id.header);
views.tv_name = (TextView) view.findViewById(R.id.tv_name);
view.setTag(views);
}
//绑定数据
views.header.setImageResource(images[position]);
views.tv_name.setText(names[position]);
return view;
}
}
private final class FolderViews{
ImageView header;
TextView tv_name;
}
BaseAdapter 使用ContentObserver 判断如果发生改变,就重新查询更新