![](/img/trans.png)
[英]Android How to refresh items after deleting from sqlite database in ExpandableListView
[英]Android ExpandableListView and SQLite Database
我的數據庫中有兩個表 - 房間和設備。 每個房間都有許多設備。 我想制作一個可擴展的列表視圖,其中房間名稱為組,設備名稱和狀態為子項(打開或關閉)。
任何人都可以給我一個簡單的想法,因為我是Android的新手,所有教程都很難
這是我的數據庫:
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"
+ ");");
}
以下是一個非常簡單,沒有多余的可擴展列表實現。
db helper類中需要兩個方法來收集所需的游標。
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);
}
然后你需要設置你的適配器(在你的活動中):
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, // 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;
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.