के बाद एक बहुत ही सरल, नहीं है फ्रिल्स विस्तार योग्य सूची कार्यान्वयन।
आपको आवश्यक कर्सर इकट्ठा करने के लिए आपको अपने डीबी हेल्पर क्लास में दो विधियों की आवश्यकता है।
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;
}
});
मुझे टी को हटाना है get getildingCursor()। getMildaging कर्सर (childCursor) getChildrenCursor() पर त्रुटि प्राप्त करने के लिए कोई हल नहीं है विधि विधि प्राप्त करें() MyExpandableListAdapter प्रकार के लिए अपरिभाषित है !! –
आह, वह कोड एक टुकड़े में था, इसलिए यह वहां काम करेगा। आप इसके बजाय 'this', या 'youractivity.this' का उपयोग करने का प्रयास कर सकते हैं। – Barak
मैंने इसका उपयोग करने की कोशिश की लेकिन जैसा कि आप देख सकते हैं MyExpandableListAdapter() एक गतिविधि नहीं है ?? !! –