Android ExpandableListView y base de datos SQLite

Tengo dos tablas en mi base de datos – habitaciones y dispositivos. Cada habitación puede tener muchos dispositivos. Quiero hacer un listview expandible con nombre de sala como grupo y dispositivos de nombre y estado como niños (encendido o apagado).

¿Puede alguien darme una idea simple porque soy un poco nuevo con Android y todos los tutoriales son difíciles de hacer

Esta es mi base de datos:

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" + ");"); } 

A continuación se muestra una implementación de lista expandible muy sencilla.

Necesita dos métodos en la clase auxiliar de db para recopilar los cursores que necesitará.

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

A continuación, debe configurar su adaptador (en su actividad):

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

Y, finalmente, llamar al adaptador y configurarlo en su lista (en su actividad):

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

¡Espero que esto ayude!

EDITAR

Todo debería unirse así:

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

EDIT 2

Para capturar clics, configure a los oyentes en su actividad:

 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, View v, int groupPosition, int groupPosition, long id) { // Your group click code here return true; } }); 
  • Cómo almacenar y recuperar una matriz de bytes (datos de imagen) ay desde una base de datos SQLite?
  • Es posible copia de seguridad y restaurar un archivo de base de datos en android? Dispositivos no root
  • SQlite Selección de la tabla basada en el idioma
  • IOS / Android sincronización con Delphi / C # aplicación de escritorio
  • Aplicación de Android con base de datos constantemente "inicio / espera de un bloqueo gc alloc"
  • SQLite SUM y LIMIT no parecen funcionar juntos
  • Incremento automático de SQLite de Android
  • Consulta SQLite: Seleccione la consulta con la cláusula BETWEEN
  • ¿Cómo agregar sub consulta en SQLITE Android junto con 'IN'?
  • SQLiteDatabase actualización no funciona?
  • Cómo utilizar Spatialite con Xamarin en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.