如何在此Android应用程序中按类别对项目进行分组?

时间:2012-07-24 20:32:23

标签: android android-layout mapping

我的应用可让用户选择一个类别,然后根据类别输入其他信息。假设他们选择“电子”类别,然后他们可以输入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);

1 个答案:

答案 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。