0

KEY_DATE=datの行を取得する必要があるテーブルがあります。

次に、これらの行をオブジェクトとして保存し、それらのオブジェクトのリストを返します。

問題は、テーブルに4つのエントリがある場合、4つの行すべてを取得する代わりに、最後の行を4回取得することです。

これが私のコードです...

while(!l.isEmpty())
    {
        hd = l.get(0);
        l.remove(0);
        map = new HashMap<String, String>();
        Log.w("myapp",hd._name+hd._price+hd._qty);

        map.put("item", hd._name);
        map.put("price", Double.toString(hd._price));
        map.put("qty", Integer.toString(hd._qty));
        map.put("total", Double.toString(hd._price*hd._qty));
        mylist.add(n++,map);
    }

    SimpleAdapter mSchedule = new SimpleAdapter(getActivity(), mylist, R.layout.details_item_list, new String[] {"item", "price", "qty" , "total"}, new int[] {R.id.col1, R.id.col2, R.id.col3, R.id.col4});
    list.setAdapter(mSchedule);

アイテムは取得されていますが、リストビューには、SQLテーブル内のアイテムの数によってのみ多重化された最後のアイテムが表示されています。map.put()およびadd()関数をループで正しく使用していますか?

4

2 に答える 2

2

これは、のインスタンスが1つしかないためですHistoryDetails。これは、リスト内に4回追加し、反復ごとに変更します。hd = new HistoryDetails();あなたはあなたのループの中に入れる必要があります

hd = new HistoryDetails();

hd._qty = Integer.parseInt(cursor.getString(3));
hd._name = c.getString(1);
hd._price = Double.parseDouble(c.getString(2));

l.add(hd);
于 2012-07-23T14:40:20.307 に答える
2
    .....
    Cursor cursor = .......   
    cursor.moveToFirst();
    while (!cursor.isAfterLast()) {

        hd = new HistoryDetails();  // IMPORTANT !!!!

        hd._qty = Integer.parseInt(cursor.getString(3));
        hd._name = cursor.getString(1);
        hd._price = Double.parseDouble(cursor.getString(2));

        l.add(hd);

        cursor.moveToNext();
    }
    cursor.close();
    .......
于 2012-07-23T14:40:59.230 に答える