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 を使用するか、Cursor を自分で処理List<String>して ArrayAdapter に渡すことができます。

于 2012-07-24T20:36:50.020 に答える