Android ExpandableListView和SQLite数据库

前端之家收集整理的这篇文章主要介绍了Android ExpandableListView和SQLite数据库前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的数据库中有两个表 – 房间和设备.每个房间都有很多设备.我想制作一个可扩展的列表视图,其中房间名称为组,设备名称和状态为子项(打开或关闭).

任何人都可以给我一个简单的想法,因为我是Android的新手,所有教程都很难

这是我的数据库

  1. public void onCreate(sqliteDatabase db) {
  2. db.execsql("create table if not exists rooms (
  3. id_room integer primary key autoincrement,"
  4. + "name_room text not null"
  5. + ");");
  6. db.execsql("create table if not exists devices (
  7. id_device integer primary key autoincrement,"
  8. + "name_device text not null,"
  9. + "state_device text not null,"
  10. + "id_room references rooms"
  11. + ");");
  12. }

解决方法

以下是一个非常简单,没有多余的可扩展列表实现.

db helper类中需要两个方法来收集所需的游标.

  1. public Cursor fetchGroup() {
  2. String query = "SELECT * FROM rooms"
  3. return mDb.rawQuery(query,null);
  4. }
  5.  
  6. public Cursor fetchChildren(String room) {
  7. String query = "SELECT * FROM devices WHERE id_room = '" + room + "'";
  8. return mDb.rawQuery(query,null);
  9. }

然后你需要设置你的适配器(在你的活动中):

  1. public class MyExpandableListAdapter extends SimpleCursorTreeAdapter {
  2. public MyExpandableListAdapter(Cursor cursor,Context context,int groupLayout,int childLayout,String[] groupFrom,int[] groupTo,String[] childrenFrom,int[] childrenTo) {
  3. super(context,cursor,groupLayout,groupFrom,groupTo,childLayout,childrenFrom,childrenTo);
  4. }
  5. }
  6.  
  7. @Override
  8. protected Cursor getChildrenCursor(Cursor groupCursor) {
  9. Cursor childCursor = mDbHelper.fetchChildren(groupCursor.getString(groupCursor.getColumnIndex("id_room"));
  10. getActivity().startManagingCursor(childCursor);
  11. childCursor.moveToFirst();
  12. return childCursor;
  13. }
  14. }

最后调用适配器并将其设置到列表中(在您的活动中):

  1. private void fillData() {
  2. mGroupsCursor = mDbHelper.fetchGroup();
  3. getActivity().startManagingCursor(mGroupsCursor);
  4. mGroupsCursor.moveToFirst();
  5.  
  6. ExpandableListView elv = (ExpandableListView) getActivity().findViewById(android.R.id.list);
  7.  
  8. mAdapter = new MyExpandableListAdapter(mGroupsCursor,getActivity(),R.layout.rowlayout_expgroup,// Your row layout for a group
  9. R.layout.rowlayout_itemlist_exp,// Your row layout for a child
  10. new String[] { "id_room" },// Field(s) to use from group cursor
  11. new int[] { android.R.id.room },// Widget ids to put group data into
  12. new String[] { "name_device","state_device" },// Field(s) to use from child cursors
  13. new int[] { R.id.device,R.id.state }); // Widget ids to put child data into
  14.  
  15. lv.setAdapter(mAdapter); // set the list adapter.
  16. }
  17. }

希望这可以帮助!

编辑

它应该像这样聚集在一起:

  1. public class List_Exp extends Activity {
  2. @Override
  3. public void onActivityCreated(Bundle savedInstanceState) {
  4. super.onActivityCreated(savedInstanceState);
  5. mDbHelper = new YourDB(getActivity());
  6. mDbHelper.open();
  7. fillData();
  8. }
  9.  
  10. private void fillData() {
  11. // set list adapter here
  12. }
  13.  
  14. public class MyExpandableListAdapter extends SimpleCursorTreeAdapter {
  15. // Your adapter
  16. }
  17. }

编辑2

要捕获点击次数,请在您的活动中设置侦听器:

  1. lv.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
  2. @Override
  3. public boolean onChildClick(ExpandableListView parent,View v,int groupPosition,int childPosition,long id) {
  4. // Your child click code here
  5. return true;
  6. }
  7. });
  8.  
  9. lv.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
  10. @Override
  11. public boolean onGroupClick(ExpandableListView parent,long id) {
  12. // Your group click code here
  13. return true;
  14. }
  15. });

猜你在找的Android相关文章