CursorAdapter继承于BaseAdapter,它是个虚类,它为cursor和ListView提供了链接的桥梁。java
newView该函数第一次回调用后,若是数据增长后也会再调用,可是重绘是不会调用的。数据增长后,回调用该函数来生成与新增数据相对应的view。
bindView函数第一次回调用后,若是数据更新也会再调用,但重绘会再次调用的。函数
添加适配器 这样ListView就会显示出来this
private ListView mListView; adapter = new ConversationAdapter(this, null); mListView.setAdapter(adapter);
CursorAdapterspa
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); } }
BaseAdaptercode
将一组数据传到像ListView,getView()方法,它是将获取数据后的View组件返回server
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 判断若是发生改变,就从新查询更新继承