我的数据库中有两个表 – 房间和设备.每个房间都有很多设备.我想制作一个可扩展的列表视图,其中房间名称为组,设备名称和状态为子项(打开或关闭).
任何人都可以给我一个简单的想法,因为我是Android的新手,所有教程都很难
这是我的数据库:
- public void onCreate(sqliteDatabase db) {
- db.execsql("create table if not exists rooms (
- id_room integer primary key autoincrement,"
- + "name_room text not null"
- + ");");
- db.execsql("create table if not exists devices (
- id_device integer primary key autoincrement,"
- + "name_device text not null,"
- + "state_device text not null,"
- + "id_room references rooms"
- + ");");
- }
解决方法
以下是一个非常简单,没有多余的可扩展列表实现.
db helper类中需要两个方法来收集所需的游标.
- public Cursor fetchGroup() {
- String query = "SELECT * FROM rooms"
- return mDb.rawQuery(query,null);
- }
- public Cursor fetchChildren(String room) {
- String query = "SELECT * FROM devices WHERE id_room = '" + room + "'";
- return mDb.rawQuery(query,null);
- }
然后你需要设置你的适配器(在你的活动中):
- public class MyExpandableListAdapter extends SimpleCursorTreeAdapter {
- public MyExpandableListAdapter(Cursor cursor,Context context,int groupLayout,int childLayout,String[] groupFrom,int[] groupTo,String[] childrenFrom,int[] childrenTo) {
- super(context,cursor,groupLayout,groupFrom,groupTo,childLayout,childrenFrom,childrenTo);
- }
- }
- @Override
- protected Cursor getChildrenCursor(Cursor groupCursor) {
- Cursor childCursor = mDbHelper.fetchChildren(groupCursor.getString(groupCursor.getColumnIndex("id_room"));
- getActivity().startManagingCursor(childCursor);
- childCursor.moveToFirst();
- return childCursor;
- }
- }
最后调用适配器并将其设置到列表中(在您的活动中):
- private void fillData() {
- mGroupsCursor = mDbHelper.fetchGroup();
- getActivity().startManagingCursor(mGroupsCursor);
- mGroupsCursor.moveToFirst();
- ExpandableListView elv = (ExpandableListView) getActivity().findViewById(android.R.id.list);
- mAdapter = new MyExpandableListAdapter(mGroupsCursor,getActivity(),R.layout.rowlayout_expgroup,// Your row layout for a group
- R.layout.rowlayout_itemlist_exp,// Your row layout for a child
- new String[] { "id_room" },// Field(s) to use from group cursor
- new int[] { android.R.id.room },// Widget ids to put group data into
- new String[] { "name_device","state_device" },// Field(s) to use from child cursors
- new int[] { R.id.device,R.id.state }); // Widget ids to put child data into
- lv.setAdapter(mAdapter); // set the list adapter.
- }
- }
希望这可以帮助!
编辑
它应该像这样聚集在一起:
- public class List_Exp extends Activity {
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
- mDbHelper = new YourDB(getActivity());
- mDbHelper.open();
- fillData();
- }
- private void fillData() {
- // set list adapter here
- }
- public class MyExpandableListAdapter extends SimpleCursorTreeAdapter {
- // Your adapter
- }
- }
编辑2
要捕获点击次数,请在您的活动中设置侦听器:
- lv.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
- @Override
- public boolean onChildClick(ExpandableListView parent,View v,int groupPosition,int childPosition,long id) {
- // Your child click code here
- return true;
- }
- });
- lv.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
- @Override
- public boolean onGroupClick(ExpandableListView parent,long id) {
- // Your group click code here
- return true;
- }
- });