转载请标明出处:http://www.cnblogs.com/tanlon/archive/2011/06/20/2085562.html

通过前面两篇文章:

Android 适配器Adapter的学习:http://www.cnblogs.com/tanlon/archive/2011/05/21/2053009.html

Android 适配器Adpter的使用总结:http://www.cnblogs.com/tanlon/archive/2011/06/20/2084901.html

我们初步了解了适配器的继承以及关系,在这里我们继续了解关于和数据库相关的适配器CursorAdpter。

我们知道BaseAdpter实现SpinnerAdapter和ListAdapter接口,而CursorAdpter则是继承了 BaseAdpter,并且衍生了ResourceCursorAdapter,又由ResourceCursorAdapter衍生了 SimpleCursorAdapter。

另外还有BaseExpandableListAdapter则是实现了ExpandableListAdpter、HeterogeneousExpandableList接口,同理CursorTreeAdapter继承了BaseExpandableListAdapter,并且衍生出了ResourceCusorTreeAdapter,由ResourceCusorTreeAdapter又衍生出了SimpleCursorTreeAdapter。

关于BaseExpandableListAdapter这一节我留着下一篇来讲。

在这里我拿CursorAdapter来做demo:

还是按照<Android 适配器Adpter的使用总结>中的三步来做,适配器的模块:

public class ListCursorAdpter extends CursorAdapter{

private LayoutInflater layoutInflater;
// 构造函数。
public ListCursorAdpter(Context context, Cursor c) {
super(context, c);
// TODO Auto-generated constructor stub
}
// 构造函数。 每当数据库的数据发生改变时,适配器将调用requery()重新查询以显示最新的数据。
public ListCursorAdpter(Context context, Cursor c, boolean autoRequery) {
super(context, c, autoRequery);
// TODO Auto-generated constructor stub
layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
// 重用一个已有的view,使其显示当前cursor所指向的数据。
public void bindView(View view, Context context, Cursor cursor) {
// TODO Auto-generated method stub
setChildView(view, cursor);
}
// 新建一个视图来保存cursor指向的数据
public View newView(Context context, Cursor cursor, ViewGroup parent) {
// TODO Auto-generated method stub
View view = layoutInflater.inflate(R.layout.listsimple_item, null );
setChildView(view, cursor);
return view;
}

public void setChildView(View view, Cursor cursor){
TextView title
= (TextView) view.findViewById(R.id.listitem_title);
TextView content
= (TextView) view.findViewById(R.id.listitem_content);
if (cursor.moveToNext() && cursor.getCount() > 0 ) {
if (cursor.getString( 7 ) != null )
title.setText(cursor.getString(
7 ));
if (cursor.getString( 1 ) != null )
content.setText(cursor.getString(
1 ));
}
}
}

接着就是实例化数据填充对象(这里以媒体数据库里的数据为例):

public class ListCursor extends Activity{
private ListView listView;
private Cursor cursor;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.list);
// 查询所有的媒体文件
cursor = allSongs();
if (cursor != null )
{
startManagingCursor(cursor);
// 我们将获得的Cursor对象交与Activity 来管理,这样Cursor对象的生命周期便能与当前的Activity自动同步,省去了自己管理Cursor
}
listView
= (ListView) findViewById(R.id.listview_simple);
ListCursorAdpter listCursorAdpter
= new ListCursorAdpter( this , cursor, true );
listView.setAdapter(listCursorAdpter);
}

private Cursor allSongs() {
// TODO Auto-generated method stub
if (cursor != null )
{
return cursor;
}
ContentResolver resolver
= getContentResolver(); // 获取ContentResolver对象
cursor = resolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null , null , null , MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
return cursor;
}
}

有什么不对的地方还望大牛多多指教!

更多相关文章

  1. 安卓的下拉控件Spinner
  2. Android(安卓)写文件权限
  3. Android(安卓)greenDAO 3.2.2简单使用
  4. android中使用HTTP协议和TCP协议实现上传文件
  5. android 开发积累
  6. 上接系出名门Android(8) - 控件(View)之TextSwitcher, Gallery,
  7. Android使用SQLiteDatabase直接存取数据与图像
  8. android 数据库操作 GreenDAO 第三方开源项目
  9. android 使用Okhttp封装上传JSON格式数据的工具类

随机推荐

  1. 仿某商城手机端页眉页脚代码实例
  2. 网易伏羲关于去ID信息的表情编码研究 |
  3. BAT题库 | 机器学习面试1000题系列(第141~
  4. 【深度学习论文班】横扫经典与前沿!
  5. 大规模预训练模型在阿里机器翻译中的应用
  6. ML笔记 | 零基础学懂机器学习(五)
  7. BAT题库 | 机器学习面试1000题系列(第146~
  8. 深度时空网络、记忆网络与特征表达学习在
  9. 在苹果Mac上如何自定 Safari 浏览器窗口?
  10. BAT题库 | 机器学习面试1000题系列(第151~