CursorTreeAdapter的使用方法

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;
	}
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值