[转]SimpleCursorAdapter类与数据绑定
转自【eoe:Android开发者门户http://www.eoeandroid.com/forum.php?mod=viewthread&tid=54757】
在许多时候需要将数据库表中的数据显示在ListView、Gallery等组件中。虽然可以直接使用Adapter对象处理,但工作量很大。为此,Android SDK提供了一个专用于数据绑定的Adapter类:SimpleCursorAdapter。
SimpleCursorAdapter与SimpleAdapter用法相近。只是将List对象换成了Cursor对象。而且SimpleCursorAdapter类构造方法的第四个参数from表示Cursor对象中的字段,而SimpleAdapter类构造方法的第四个参数from表示Map对象中的key。除此之外,这两个Adapter类在使用方法完全相同。
下面是SimpleCursorAdapter类构造方法定义。
public SimpleCursorAdapter(Context context,int layout,Cursor c,String[] from,int[] to);
下例中通过SimpleCursorAdapter类将数据库表绑定在ListView上,也就是说,该ListView会显示数据表的全部记录。在绑定数据前,需要先编写一个SQLiteOpenHelper类的子类,用于操作数据库,代码如下:
package com.li;import java.util.Random;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;public class DBService extends SQLiteOpenHelper { private final static int DATABASE_VERSION = 1; private final static String DATABASE_NAME = "test.db"; public DBService(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { //创建表 String sql = "CREATE TABLE [t_test](" + "[_id]AUTOINC," + "[name]VARCHAR2(20) NOT NULL CONFLICT FAIL," + "CONSTRAINT[sqlite_autoindex_te_test_1]PRIMARY KEY([_id]))"; db.execSQL(sql); //向test数据库中插入20条记录 Random random = new Random(); for ( int i = 0;i<20;i++) { String s = ""; for(int j=0;j<10;j++) { char c = (char)(97+random.nextInt(26)); s+=c; } db.execSQL("insert into t_test(name)values(?)",new Object[]{s}); } } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } //执行查询语句 public Cursor query(String sql,String[] args) { SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.rawQuery(sql, args); return cursor; }}package com.li; import android.app.ListActivity; import android.database.Cursor; import android.os.Bundle; import android.widget.SimpleCursorAdapter; public class MapsDemo extends ListActivity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); DBService dbService = new DBService(this); //查询数据 Cursor cursor = dbService.query("select * from t_test", null); //绑定数据 SimpleCursorAdapter simpleCursorAdapter = new SimpleCursorAdapter (this,android.R.layout.simple_expandable_list_item_1,cursor,new String[]{"name"},new int[]{android.R.id.text1}); setListAdapter(simpleCursorAdapter);}}