ITEEDU

ResourceCursorTreeAdapter示例

import android.app.ExpandableListActivity;
import android.content.ContentUris;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.view.View;
import android.widget.ExpandableListAdapter;
import android.widget.ResourceCursorTreeAdapter;
import android.widget.TextView;
public class ExpandableListSample3Xml extends ExpandableListActivity {
	private int mGroupIdColumnIndex;
	private String mPhoneNumberProjection[] = new String[] {
		Phone._ID, Phone.NUMBER
	};
	private ExpandableListAdapter mAdapter;
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// Query for people
		Cursor groupCursor = managedQuery(Phone.CONTENT_URI,
		new String[] {Phone._ID, Phone.DISPLAY_NAME}, null, null, null);
		// Cache the ID column index
		mGroupIdColumnIndex = groupCursor.getColumnIndexOrThrow(Phone._ID);
		// Set up our adapter
		mAdapter = new MyExpandableListAdapter(this, groupCursor,
		android.R.layout.simple_expandable_list_item_1,//这个是系统的
		android.R.layout.simple_expandable_list_item_1);//这个是系统的
		setListAdapter(mAdapter);
	}
	public class MyExpandableListAdapter extends ResourceCursorTreeAdapter {
		public MyExpandableListAdapter(Context context, Cursor cursor, int groupLayout, int childLayout) {
			super(context, cursor, groupLayout, childLayout);
			// TODO Auto-generated constructor stub
		}
		//绑定child项数据到视图
		@Override
		protected void bindChildView(View view, Context context, Cursor cursor, boolean isExpanded) {
			((TextView)view).setText(cursor.getString(cursor.getColumnIndex(Phone.NUMBER)));
		}
		//绑定group项数据到视图
		@Override
		protected void bindGroupView(View view, Context context, Cursor cursor, boolean isExpanded) {
			((TextView)view).setText(cursor.getString(cursor.getColumnIndex(Phone.DISPLAY_NAME)));
		}
		@Override
		protected Cursor getChildrenCursor(Cursor groupCursor) {
			// Given the group, we return a cursor for all the children within that group
			// Return a cursor that points to this contact's phone numbers
			//查询得到child项的Cursor
			Uri.Builder builder = Phone.CONTENT_URI.buildUpon();
			ContentUris.appendId(builder, groupCursor.getLong(mGroupIdColumnIndex));
			Uri phoneNumbersUri = builder.build();

			// The returned Cursor MUST be managed by us, so we use Activity's helper
			// functionality to manage it for us.
			return managedQuery(phoneNumbersUri, mPhoneNumberProjection, null, null, null);
		}
	}
}