我想用我的 SQLite 数据库中的数据制作一个可扩展的列表视图。
但我只想从各种表中获取子列表的数据,并且组将始终相同。
然后将每个表的数据放入相关组的子列表中。
有可能的?有一些例子吗?
谢谢。
我想用我的 SQLite 数据库中的数据制作一个可扩展的列表视图。
但我只想从各种表中获取子列表的数据,并且组将始终相同。
然后将每个表的数据放入相关组的子列表中。
有可能的?有一些例子吗?
谢谢。
好的,有点引导。我从中提取这个示例的项目是一个购物清单应用程序。可以有多个购物清单,具有不同的项目和数量。
因此,使用了三个表。杂货清单表,它只是一个带有 id 和名称的表。然后是一个项目表,其中包含 id、项目名称、计量单位、类别、通道和价格。最终的表是列表表,包含列表中的id、列表id、商品id和数量。
我希望能够按类别或过道排序,所以我创建了一些游标方法,它们接受参数来指定要使用的列。
三件事使这项工作......首先您在组游标查询中使用 DISTINCT 以确保您为要分组的每个单独项目获得一条记录。其次,您将它们设置为_id
. 最后,您可以JOIN
使用各种表格将所需的信息放入单个游标中。
dbhelper 可扩展列表游标
public Cursor fetchGroup(String group, long list) {
String query = "SELECT DISTINCT "
+ group
+ " AS _id FROM "
+ LISTITEM_TABLE
+ " JOIN "
+ ITEM_TABLE
+ " ON list_items.item_id=items._id WHERE list_items.list_id = "
+ list;
return mDb.rawQuery(query, null);
}
public Cursor fetchChildren(String column, String token, long list) {
String query = "SELECT list_items._id, list_items.item_qty, items.name, items.cost, items.unit, list_items.checked FROM list_items JOIN items ON list_items.item_id=items._id WHERE "
+ column
+ "='"
+ token
+ "' AND list_items.list_id = "
+ list
+ " ORDER BY list_items.checked, items.name";
return mDb.rawQuery(query, null);
}
设置展开列表
ExpandableListView lv;
mGroupsCursor = mDbHelper.fetchGroup(group,
ListFragment_ShopList.listId);
getActivity().startManagingCursor(mGroupsCursor);
mGroupsCursor.moveToFirst();
lv = (ExpandableListView) getActivity().findViewById(android.R.id.list);
mAdapter = new MyExpandableListAdapter(mGroupsCursor, getActivity(),
R.layout.rowlayout_expgroup, R.layout.rowlayout_itemlist_exp,
new String[] { "_id" }, new int[] { android.R.id.text1 },
new String[] { GroceryDB.ITEM_NAME, GroceryDB.LISTITEM_QTY,
GroceryDB.ITEM_UNIT }, new int[] { R.id.ListItem1,
R.id.ListItem3, R.id.ListItem2 });
lv.setAdapter(mAdapter);
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(GroceryListMain.group,
groupCursor.getString(groupCursor.getColumnIndex("_id")),
ListFragment_ShopList.listId);
getActivity().startManagingCursor(childCursor);
childCursor.moveToFirst();
return childCursor;
}
protected void bindChildView(View view, Context context, Cursor cursor,
boolean isLastChild) {
TextView name = (TextView) view.findViewById(R.id.ListItem1);
TextView qty = (TextView) view.findViewById(R.id.ListItem3);
TextView unit = (TextView) view.findViewById(R.id.ListItem2);
TextView cost = (TextView) view.findViewById(R.id.ListItem4);
name.setTextColor(MyApplication.shoplistitem_name);
unit.setTextColor(MyApplication.shoplistitem_desc);
qty.setTextColor(MyApplication.shoplistitem_qty);
cost.setTextColor(MyApplication.shoplistitem_desc);
name.setText(cursor.getString(2));
qty.setText(cursor.getString(1));
unit.setText(cursor.getString(4));
DecimalFormat df = new DecimalFormat("0.00");
Double hold = Double.valueOf(cursor.getString(3));
Double qtyhold = Double.valueOf(cursor.getString(1));
Double total = hold * qtyhold;
cost.setText("$" + df.format(total));
}
}
希望这能说明你需要什么。如果您有任何问题,请给我留言,我会尽力澄清。