以下是一个非常简单、没有花哨的可扩展列表实现。
你需要在数据库助手类中编写两个方法来获取所需的游标。
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);
}
然后你需要在你的Activity中设置适配器:
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,
R.layout.rowlayout_itemlist_exp,
new String[] { "id_room" },
new int[] { android.R.id.room },
new String[] { "name_device", "state_device" },
new int[] { R.id.device, R.id.state });
lv.setAdapter(mAdapter);
}
}
希望这能有所帮助!
编辑
应该像下面这样全部组合起来:
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() {
}
public class MyExpandableListAdapter extends SimpleCursorTreeAdapter {
}
}
编辑2
要捕获点击事件,需要在您的活动中设置监听器:
lv.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
return true;
}
});
lv.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView parent, View v,
int groupPosition, int groupPosition, long id) {
return true;
}
});