0

私は2つの文字列をアイテムとして選択し、もう1つは説明であるデータベースを持っています。これらの2つの文字列をリストビューのアイテムサブアイテムレイアウトにマップしようとしています。次のコードは、これまでに試したものです。

List<Map<String, String>> data = new ArrayList<Map<String, String>>();
Map<String, String> datum = new HashMap<String, String>(2);
SimpleAdapter adapter = new SimpleAdapter(this, data,
        android.R.layout.simple_list_item_2, 
        new String[] { "item","descr" }, 
        new int[] { android.R.id.text1, android.R.id.text2 });
itemList.setAdapter(adapter);

Cursor cours = MainActivity.mydb.query("sub_menu", null, "cat_id = "
        + menuid + " AND sub_flag = 1", null, null, null, null);

if (cours.moveToFirst()) {
    do {
        datum.put("item", cours.getString(cours.getColumnIndex("sub_label")));
        datum.put("descr", cours.getString(cours.getColumnIndex("sub_description")));
        data.add(datum);
        Log.d("testt", datum.toString());

        adapter.notifyDataSetChanged();

    } while (cours.moveToNext());
}

問題は、データベースから選択された最後の行である同じ値を持つ5つのエントリをリストビューに追加することです。これを修正する方法はありますか?

編集。それを試した後、すべてのエントリの保存値を持つオブジェクトデータを上書きしていることに気付きました。修正は、データムの初期化行をループに移動するのと同じくらい簡単でした。ここに最終的なコードがあります

List<Map<String, String>> data = new ArrayList<Map<String, String>>();
        String[] from = new String[] { "rowid", "col_1" };
        int[] to = new int[] { android.R.id.text1, android.R.id.text2 };

        Cursor cours = MainActivity.mydb.query("sub_menu", null, "cat_id = "
                + menuid + " AND sub_flag = 1", null, null, null, null);

        if (cours.moveToFirst()) {

            do {
                Map<String, String> datum = new HashMap<String, String>(2);
                datum.put("rowid",
                        cours.getString(cours.getColumnIndex("sub_label")));
                datum.put("col_1", cours.getString(cours
                        .getColumnIndex("sub_description")));
                data.add(datum);
            } while (cours.moveToNext());

        }
        SimpleAdapter adapter = new SimpleAdapter(this, data,
                android.R.layout.simple_list_item_2, from, to);
        itemList.setAdapter(adapter);
4

1 に答える 1