首页

CursorAdapter类

搜索

概述
CursorAdapter适配器类继承自BaseAdapter,该类是抽象类,它是cursor和ListView的连接桥
梁。
CursorAdapter适配器要求的数据源是Cursor对象,要求数据表中必须有个名为”_id”的列。
常用方法
1, public abstract View newView(Context context, Cursor cursor, ViewGroup parent);
作用:初始化布局,为列表控件生成每一行的布局对象。
参数-context:当前所在的组件对象,如当前的Activity的对象。
参数-cursor:从数据库中查询的结果集。
参数-parent:当前行对象的父容器对象。
2, public abstract void bindView(View view, Context context, Cursor cursor);
作用:为newView生成的行布局对象纤陡数据,数据来源于cursor
参数-view:newView生成的行布局对象。
参数-context:当前所在的组件对象,如当前的Activity对象。
参数-cursor:从数据库中查询的结果集。
CursorAdapter使用步骤
步骤1、创建列表控件,如ListView控件的对象。
步骤2、从数据库中读取数据,结果集存放在Cursor对象中。
步骤3、创建继承了CursorAdapter类的子类的对象,示例如下:
//以下用匿名内部类创建了一个继承自CursorAdapter抽象类的对象
CursorAdapter adapter=newCursorAdapter(this, cursor, false){
//重写newView方法,创建行布局对象
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent){
//创建布局解析器对象
LayoutInflater inflator=LayoutInflater.from(MainAct.this);
//从布局文件中解析布局文件lisview_item.xml
View view=inflator.inflate(R.layout.listview_item, null);
return view;//返回垂直列表的行布局对象
}
//重写bindView方法,提供显示数据
@Override
publicvoid bindView(View view, Context context, Cursor cursor){
//读取结果集中字段为姓名的数据
String name=cursor.getString(cursor.getColumnIndex(
Persons.COLUMN_NAME);
//读取结果集中字段是的电话的数据
String phone=cursor.getString(cursor.getColumnIndex(
Persons.COLUMN_PHONE);
//实例化显示姓名和电话的标签对象
TextView tvName=(TextView)view.findViewById(R.id.tvName);
TextView tvPhone=(TextView)view.findViewById(R.id.tvPhone);
tvName.setText(name);//显示姓名
tvPhone.setText(phone);//显示电话
}
};
步骤4、设置列表控件与CursorAdapter对象相关联,示例如下;
IistView.setAdapter(adapter);
【示例-1】将数据库查询出的结果显示在ListView中。
项目名称:exerl7_ 04 ,包名:com.mt.exerl7_4,项目入口:MainActjava,运行结果如图一1

图一1
要求,对数据库中的person表进行增删改查操作。
关键步骤:
步骤1、创建工具类Personsjava,该类中定义了数据库中表的表名和表中的字段名。代码如下:
public final class Persons{
public static final String TABLE_NAME="person";
public static final String COLUMN_NAME="name";
public static final String COLUMN_PHONE="phone";
}
步骤2、创建MySQLiteHelper Java类,该类负责创建数据库表和对表进行增删改查操作.
public class MySQLiteOpenHelper extends SQLiteOpenHelper{
//创建库名:mt.db的数据库
public MySQLiteOpenHelper(Context context){
super(context, "tarena.db", null, 1);
}
//创建person表
@Override
public void onCreate(SQLiteDatabase db){
db.execSQL("CREATE TABLE IF NOT EXISTS person"+
"(_ id integer primary key autoincrement,"+
”name varchar(20),"+
”phone varchar(12))");
}

@Override
publicvoid onUpgrade(SQLiteDatabase db, intoldVersion, int newVersion){
// Auto-generated method stub
//増加三条记录
publicvoid insert(){
ContentValues values=newContentValues();
values.put(Persons.COLUMN_NAME,”八戒”);
values.put(Persons.COLUMN_PHONE, "158007755");
SQLiteDatabase db=thisgetWritableDatabase();
db.insert(Persons.TABLE_NAME, null, values);
values.put(Persons.COLUMN_PHONE, "68905533");
db.execSQL("insert into person(name,phone)"+
"values(’唐僧’,'133557788')");
db.execSQL("insert into person(name,phone)"+
"values ("悟空",'13533669911')");
//delete record
public void delete(){
SQLiteDatabase db=thisgetWritableDatabase();
db.delete(Persons.TABLE_NAME, "_ id=?”,new String[]{"1"});
}

//update record
public void update(){
SQLiteDatabase db=thiagetWritableDatabase();
ContentValues values=newContentValues();
values.put(Persons.COLUMN_PHONE, "68335588");
db.update(Persons.TABLE_NAME, values, "_ id=?”,new String[]{"2"});
public Cursor query(){
SQLiteDatabase db=thisgetReadableDatabase();
Cursor cursor=db.query(Persons.TABLE_NAME,
null, null, null, null, null, null;
return cursor;

}

}
步骤3、打开MainAct.java,该类负责显示读取的数据,代码如下:
public class MainAct extends Activity implements OnCIickListener{
CursorAdapter mAdapter;//定义游标适配器类的引用变量
//定义MySQLiteOpenHelper类的引用变量
MySQLiteOpenHelper mMySQLiteHelper;
@Override
publicvoid onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initButtons();//初始化各按钮对象,并设置这些按钮的单击事件
ListView IistView=(ListView)findViewById(R.id.listView);
//创建MySQLiteOpenHelpe时象
mMySQLiteHelper=new MySQLiteOpenHelper(this);
Cursor cursor=mMySQLiteHelper.query();//读取数据表中所有记录
//创建CursorAdapter对象
mAdapter=new CursorAdapter(this, cursor, false){
//重写newView方法,创建行布局对象
@Override
public View newView(Context context Cursor cursor,ViewGroup parent){
//创建布局解析器对象
LayoutInflater inflator=LayoutInflater.from(MainAct.this);
//从布局文件中解析布局文件lisview_item.xml
View view=inflator.inflate(R.layout.list}iew item, null);
return view;//返回垂直列表的行布局对象
}
//重写bindView方法,提供显示数据
@Override
public void bindView(View view, Context context, Cursor cursor){
//读取结果集中字段为姓名的数据
String name=cursor.getString(cursor.getColumnIndex(
Persons.COLUMN_NAME);
//读取结果集中字段是的电话的数据
String phone=cursor.getString(cursor.getColumnIndex(
Persons.COLUMN_PHONE);
//实例化显示姓名和电话的标签对象
TextView tvName=(TextView)view.findViewById(R.id.tvName);
TextView tvPhone=(TextView)view.findViewById(R.id.tvPhone);
tvName.setText(name);//显示姓名
tvPhone.setText(phone);//显示电话
}
};
IistView.setAdapter(mAdapter);//垂直列表控件与游标适配器对象相关联

}
//初始化各按钮和设置按钮的单击事件
privatevoid initButtons(){
Button btnInsert=(Button)findViewById(R.id.btnlnsert);
Button btnDelete=(Button)findViewById(R.id.btnDelete);
Button btnUpdate=(Button)findViewById(R.id.btnUpdate);
Button btnQuery=(Button)findViewById(R.id.btnQuery);
//设置按钮的点击事件
btnInsert.setOnCIickListener(this);
btnDelete.setOnCIickListener(this);
btnUpdate.setOnCIickListener(this);
btnQuery.setOnCIickListener(this);
}
//重写OnCIick.onClick()方法,实现按钮的事件
@Override
public void onClick(View v){
switch (v.getId()){
case R.id.btnlnsert:
mMySQLiteHelper.insert();//向表中插入记录
break;
case R.id.btnDelete:
mMySQLiteHelper.delete();//删除表中的一条记录
break;

case R.id.btnUpdate:
mMySQLiteHelper.update();//更新表中的一条记录
break;
case R.id.btnQuery: //查询表中所有记录
break;
//查询表,结果集存放在cursor中
Cursor cursor=mMySQLiteHelper.query();
mAdapter.changeCursor(cursor);//更新游标适配器对象
mAdapter.notifyDataSetChanged();//通知垂直列表控件数据发生改变
}

}

 

上一页 下一页