在Android开发中常常需要通过界面控件来访问数据库,比如用获得数据库的值来填充表单,列表等。在这里我们使用数据适配器想空间绑定数据。
使用SimpleCursorAdapte绑定数据
比如我们使用ListView 来查看作者和书名之间的关系。在ListView中可以包含TextView的对象,所以首先创建一个名为author_item.xml文件。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://com.paozi.book/apk/res/android"
android:id="@+id/RelativeLayoutHeader"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/authorName"
android:layout_width="wrap_content"
android:layout_height="?android:attr/listPreferredItemHeight"
android:layout_alignParentLeft="true" >
</TextView>
<TextView
android:id="@+id/bookName"
android:layout_width="wrap_content"
android:layout_height="?android:attr/listPreferredItemHeight"
android:layout_alignParentRight="true" >
</TextView>
</RelativeLayout>
在ListView所在的布局文件
中:
<ListView
android:id="@+id/petList"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:divider="#000"
android:headerDividersEnabled="true"
android:isScrollContainer="true"
android:scrollbarAlwaysDrawVerticalTrack="true"
android:scrollbars="vertical" />
要通过应用程序来填充ListView,使用以下的步骤:
- 执行查询语句并返回一个游标即Cursor变量
- 创建一个适配器,它能将数据映射到ListView控件中
- 将适配器与ListView关联起来。
以上步骤用代码反映为:
以上方法就是用数据适配器向控件绑定数据的步骤。
//新建查询SQLiteQueryBuilder能执行复杂查询操作,比如多表查询 SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder(); queryBuilder.setTables("book , author"); queryBuilder.appendWhere("book.authorid = author.id"); //使用数据库并执行查询操作 String asColumnsToReturn[] = { "book.title", "book.id", "author.firstname", "author.lastname", "book.authorid"}; String strSortOrder = "id ASC";//数据显示顺序方式 Cursor mCursor = queryBuilder.query(mDB, asColumnsToReturn, null, null,null,null, strSortOrder); // 创建并使用适配器 startManagingCursor(mCursor);//废弃的方法,将Cursor的管理交给Activity来处理 ListAdapter adapter = new SimpleCursorAdapter(this, R.layout.author_item, mCursor, new String[] {author.firstname, book.name}, new int[] { R.id.TextView_Authorfirstname, R.id.TextView_BookName }); ListView av = (ListView) findViewById(R.id.authorList); av.setAdapter(adapter)