CursorAdapter大家都用过,通过游标获取数据加载到相应的布局之上。一般使用在ListView上面。但是有时候单纯的一个listview不够用,我们需要用到ExpandableListView,这个时候,我们再用CursorAdapter自然是不够用了,但是,对于这个ExpandableListView,自然也有对应的游标适配器,是CursorTreeAdapter。
CursorTreeAdapter的用法就是通过父游标查找子游标,然后绑定数据。一般数据库中提供至少两张表,一张表是父数据的表,剩下的表示子数据的表。子数据的表中主要索引键即为父数据中的_id等等,同时表名也是固定名称+_id,方便查找
上代码:
CursorTreeAdapter:
import java.io.File;
import android.content.Context;
import android.database.Cursor;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CursorTreeAdapter;
import android.widget.TextView;
import CommonnumService;
public class DeptCursorAdapter extends CursorTreeAdapter {
private LayoutInflater inflater = null;
private CommonnumService service = null;
private String file = null;
public DeptCursorAdapter(Cursor cursor, Context context) {
super(cursor, context);
//使用资产目录之下的数据库.db文件
inflater = LayoutInflater.from(context);
service = new CommonnumService(context);
file = new File(context.getFilesDir(),"commonnum.db").getAbsolutePath();
}
@Override
protected Cursor getChildrenCursor(Cursor groupCursor) {
//通过父数据库的索引找到子数据的游标
int i = groupCursor.getInt(groupCursor.getColumnIndex("idx"));
Cursor cs = service.getChildrenCursor(file, i);
return cs;
}
@Override
protected View newGroupView(Context context, Cursor cursor,
boolean isExpanded, ViewGroup parent) {
//创建父布局
View view = inflater.inflate(android.R.layout.simple_expandable_list_item_1, null);
return view;
}
@Override
protected void bindGroupView(View view, Context context, Cursor cursor,
boolean isExpanded) {
//绑定父布局的数据
TextView text1 = (TextView) view.findViewById(android.R.id.text1);
String name = cursor.getString(cursor.getColumnIndex("name"));
text1.setText(name);
}
@Override
protected View newChildView(Context context, Cursor cursor,
boolean isLastChild, ViewGroup parent) {
//创建子布局
View view = inflater.inflate(android.R.layout.simple_expandable_list_item_2, null);
return view;
}
@Override
protected void bindChildView(View view, Context context, Cursor cursor,
boolean isLastChild) {
//绑定子布局的数据
TextView text1 = (TextView) view.findViewById(android.R.id.text1);
TextView text2 = (TextView) view.findViewById(android.R.id.text2);
String name = cursor.getString(cursor.getColumnIndex("name"));
String tel = cursor.getString(cursor.getColumnIndex("number"));
text1.setText(name);
text2.setText(tel);
}
}
Services:
import java.io.File;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class CommonnumService{
public Cursor getParentCursor(String file) {
Cursor cs = null;
SQLiteDatabase sdb = SQLiteDatabase.openDatabase(file, null,
SQLiteDatabase.OPEN_READONLY);
if (sdb.isOpen()) {
String sql = "select idx as _id , name , idx from classlist";
cs = sdb.rawQuery(sql, null);
}
return cs;
}
public Cursor getChildrenCursor(String file ,int i){
Cursor cs = null;
SQLiteDatabase sdb = SQLiteDatabase.openDatabase(file, null,
SQLiteDatabase.OPEN_READONLY);
if (sdb.isOpen()) {
cs = sdb.query("table"+i, new String[] {"_id", TABLE_NAME,
TABLE_NUMBER }, null, null, null, null, null);
}
return cs;
}
}