0

我的应用程序允许用户选择一个类别,然后根据该类别输入其他信息。假设他们选择“电子”类别,然后他们可以在其中输入 CD、PS3、iPod 等。我有几个类别,例如爱好,一般,家庭等。

我想在按类别排序的列表视图中显示项目,如下所示:

Electronics
 -CD
 -PS3
 -iPod
Books
 -Perl
 -Android is fun
 -C

等等等等……

我正在使用以下方法从数据库中获取所有数据:

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);
4

1 回答 1

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 或自己处理 CursorList<String>并将其传递给 ArrayAdapter。

于 2012-07-24T20:36:50.020 回答