2012-05-17 17 views
7

मेरे डेटाबेस में दो टेबल हैं - कमरे और डिवाइस। प्रत्येक कमरे में कई डिवाइस हो सकते हैं। मैं कमरे के नाम के साथ समूह और डिवाइस के नाम और राज्य के रूप में बच्चों के रूप में एक विस्तार योग्य सूचीदृश्य बनाना चाहता हूं (चालू या बंद)।एंड्रॉइड एक्सपेंडेबल लिस्ट व्यू और एसक्यूएलएट डाटाबेस

किसी भी एक मुझे एक सरल विचार दे सकते हैं क्योंकि मैं एंड्रॉयड के साथ नए की तरह कर रहा हूँ और सभी ट्यूटोरियल

बनाने के लिए मुश्किल है यह मेरा डेटाबेस है:

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

उत्तर

13

के बाद एक बहुत ही सरल, नहीं है फ्रिल्स विस्तार योग्य सूची कार्यान्वयन।

आपको आवश्यक कर्सर इकट्ठा करने के लिए आपको अपने डीबी हेल्पर क्लास में दो विधियों की आवश्यकता है।

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

और अंत में अनुकूलक फोन करके अपनी सूची में यह सेट (अपनी गतिविधि में):

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

तो फिर तुम अपने अनुकूलक सेट करने के लिए (अपनी गतिविधि में) की जरूरत है

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, View v, 
     int groupPosition, int groupPosition, long id) { 
     // Your group click code here 
     return true; 
    } 
}); 
+0

मुझे टी को हटाना है get getildingCursor()। getMildaging कर्सर (childCursor) getChildrenCursor() पर त्रुटि प्राप्त करने के लिए कोई हल नहीं है विधि विधि प्राप्त करें() MyExpandableListAdapter प्रकार के लिए अपरिभाषित है !! –

+0

आह, वह कोड एक टुकड़े में था, इसलिए यह वहां काम करेगा। आप इसके बजाय 'this', या 'youractivity.this' का उपयोग करने का प्रयास कर सकते हैं। – Barak

+0

मैंने इसका उपयोग करने की कोशिश की लेकिन जैसा कि आप देख सकते हैं MyExpandableListAdapter() एक गतिविधि नहीं है ?? !! –

संबंधित मुद्दे