我的应用可让用户选择一个类别,然后根据类别输入其他信息。假设他们选择“电子”类别,然后他们可以输入CD,PS3,iPod等。我有几个类别,如爱好,一般,家庭等。
我想在列表视图中显示按类别排序的项目:
Electronics
-CD
-PS3
-iPod
Books
-Perl
-Android is fun
-C
等等......
我使用以下方法从db获取所有数据:
return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID,KEY_CATEGORY
KEY_NAME, KEY_STATUS, KEY_DESCRIPTION}, null, null, null, null, null);
我也尝试过使用rawQuery并使用DISTINCT标签,但这不会起作用,因为它会选择唯一的项目。我使用simpleCursorAdapter来显示数据:
SimpleCursorAdapter list =
new SimpleCursorAdapter(this, R.layout.items, c, mapFrom, mapTo);
setListAdapter(list);
答案 0 :(得分:1)
我猜你想要这个:
return mDb.query(DATABASE_TABLE,
new String[] {KEY_ROWID, KEY_CATEGORY, KEY_NAME, KEY_STATUS, KEY_DESCRIPTION},
null, null, null, null,
KEY_CATEGORY + ", " + KEY_NAME);
使用Order By参数,您的查询首先按类别排序,然后按名称排序。这会给你一个结果,如:
Category, Name
--------------
Books, Android is fun
Books, C
Books, Perl
Electronics, CD
Electronics, iPod
Electronics, PS3
如果您只想列出图书,那么您只需使用:
return mDb.query(DATABASE_TABLE,
new String[] {KEY_ROWID, KEY_CATEGORY, KEY_NAME, KEY_STATUS, KEY_DESCRIPTION},
KEY_CATEGORY + "=?",
new String[] {"Books"},
null, null,
KEY_NAME);
当然,如果您只想在ListView中显示类别和名称,那么您可以更有效地将SELECT子句缩短为仅需要的内容:new String[] {KEY_ROWID, KEY_CATEGORY, KEY_NAME}
。
添加评论
为了得到这样的结果:
Books
Android is fun
C
Perl
Electronics
CD
iPod
PS3
您可以使用ExpandableListView或将Cursor自己处理为List<String>
并将其传递给ArrayAdapter。