Android Api Demos登顶之路(108)View-->ExpanableLists-->Cursor
2015-10-23 04:57
471 查看
/*本例演示了为ExpandableListView设置数据适配器的第二种方式:Cursor */ public class MainActivity extends ExpandableListActivity { private static final String[] CONTACTS_PROJECTION = new String[] { Contacts._ID, Contacts.DISPLAY_NAME }; private static final int GROUP_ID_COLUM_INDEX = 0; private static final String[] PHONE_NUMBER_PROJECTION = new String[] { Phone._ID, Phone.NUMBER }; // group的标志 private static final int TOKEN_GROUP = 0; // child的标志 private static final int TOKEN_CHILD = 1; // 异步查询类 private class QueryHandler extends AsyncQueryHandler { private CursorTreeAdapter mAdapter; // 对未实现的构造函数进行改造,但super的参数是不能变的 public QueryHandler(Context context, CursorTreeAdapter adapter) { super(context.getContentResolver()); this.mAdapter = adapter; } // 重写该方法,根据标志位为Adapter设置Cursor @Override protected void onQueryComplete(int token, Object cookie, Cursor cursor) { switch (token) { case TOKEN_GROUP: mAdapter.setGroupCursor(cursor); break; case TOKEN_CHILD: int groupPosition = (Integer) cookie; mAdapter.setChildrenCursor(groupPosition, cursor); break; } } } private QueryHandler mHandler; private CursorTreeAdapter mAdapter; private class MyExpandableListAdapter extends SimpleCursorTreeAdapter { // 注意这里在构造方法中不需要Cursor cursor参数,避免在主线程中对数据库进行查询 public MyExpandableListAdapter(Context context, int groupLayout, String[] groupFrom, int[] groupTo, int childLayout, String[] childFrom, int[] childTo) { super(context, null, groupLayout, groupFrom, groupTo, childLayout, childFrom, childTo); // TODO Auto-generated constructor stub } @Override protected Cursor getChildrenCursor(Cursor groupCursor) { // 构建一个新的Uri的builder,该builder继承此Uri的属性 Uri.Builder builder = Contacts.CONTENT_URI.buildUpon(); ContentUris.appendId(builder, groupCursor.getLong(GROUP_ID_COLUM_INDEX)); // 添加子项的Uri路径 builder.appendEncodedPath(Contacts.Data.CONTENT_DIRECTORY); Uri phoneNumberUri = builder.build(); // 查询子项数据,由handler负责查询,所次需要返回cursor结果集 mHandler.startQuery(TOKEN_CHILD, groupCursor.getPosition(), phoneNumberUri, PHONE_NUMBER_PROJECTION, Phone.MIMETYPE + "=?", new String[] { Phone.CONTENT_ITEM_TYPE }, null); return null; } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mAdapter = new MyExpandableListAdapter( this, // 该布局中只有一个textView android.R.layout.simple_expandable_list_item_1, new String[] { Contacts.DISPLAY_NAME }, new int[] { android.R.id.text1 }, android.R.layout.simple_expandable_list_item_1, new String[] { Phone.NUMBER }, new int[] { android.R.id.text1 }); setListAdapter(mAdapter); mHandler = new QueryHandler(this, mAdapter); // 查询父项 mHandler.startQuery(TOKEN_GROUP, null, Contacts.CONTENT_URI, CONTACTS_PROJECTION, Contacts.HAS_PHONE_NUMBER+"=1", null, null); } @Override protected void onDestroy() { super.onDestroy(); mAdapter.changeCursor(null); mAdapter=null; } }
相关文章推荐
- [转]android中listview点击事件失效
- Android系列---JSON数据解析
- 使用RecyclerView CardView相关问题 解决The hierarchy of the type is inconsistent问题
- Android开机自启动应用
- 28.Android 十分方便的EasyRecyclerView
- 27.Android 拨号工具DialUtil
- AndroidManifest.xml中为啥android:name的值前面要加上点号
- 【Android效果集】下雨效果
- AndroidManifest.xml文件解析
- Android Studio常用快捷键(Ubuntu版)
- Android播放声音
- Intent 对象在 Android 开发中的应用
- where are the android default layouts' files?
- AndroidScreenSlide项目切换view动画效果
- Android带进度条文件上传
- android获取签名,兼容5.0
- Android 自定义Button按钮显示样式(正常、按下、获取焦点)
- Android 实现Activity后台运行
- 浅谈android的selector,背景选择器
- Android原生notification的使用方法