2012-05-17 34 views
7

Veritabanımda iki oda var - odalar ve cihazlar. Her odada birçok cihaz bulunabilir. Grup adı ve cihaz adı ile çocuk adı (açık veya kapalı) olarak oda ismiyle genişletilebilir bir liste yapmak istiyorum. Ben Android ile nazik yeni biriyim ve tüm öğreticilerAndroid ExpandableListView ve SQLite Veritabanı

yapmak zor çünkü

herhangi biri bana basit bir fikir verebilir Bu benim veritabanıdır:

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

cevap

13

ardından hayır, bir çok basit genişletilebilir liste uygulaması fırlatır.

İhtiyaç duyduğunuz imleçleri toplamak için db yardımcı sınıfınızda iki yönteme ihtiyacınız vardır.

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

Ve nihayet adaptörü arayıp (sizin aktivitesinde) listenize ayarlayın:

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

Sonra (etkinlik içinde) adaptör kurmak gerekir

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

Bu yardımcı olur umarız!

DÜZENLEME

Hepsi çok gibi birlikte gelmelidir:

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

:

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

DÜZENLEME 2

, tıklama yakalamak için size aktivite dinleyicileri ayarlayın T kaldırmak zorundayım onun getActivity(). getChildrenCursor() üzerinde startManagingCursor (childCursor)() hata kaldırmak için herhangi bir solytion yok çünkü getActivity() yöntemi MyExpandableListAdapter türü için undefined !! –

+0

Ah, bu kod bir parçadaydı, o yüzden orada çalışırdı. Bunun yerine 'bunu 'veya' youractivity.this 'kullanmayı deneyebilirsiniz. – Barak

+0

Bunu kullanmayı denedim ama görebildiğim gibi MyExpandableListAdapter() bir etkinlik değil ?? –

İlgili konular