0

説明が見つからないという奇妙な問題に直面しています。次のようにコードでコメントします。

     final List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();

        Map<String,Object> map = new HashMap<String,Object>();
//for example payss ArrayList contains `A,B,C,D,E,F,G`
        for (int i=0;i<payss.size();i++){

        Bitmap contact_pic=pays_drapeaux.get(i);   
        drawable=new BitmapDrawable(contact_pic); 
        map.put("pays", payss.get(i).getNom());
        Log.i("PAYS",payss.get(i).getNom()); //here it shows correctly the values one by one
        map.put("drapeau",drawable);

        list.add(map);

       }
  //here want to show what the list contains after setting it above
    for (int i=0;i<list.size();i++){
    Log.i("VALUES",list.get(i).values().toString()); //but here it shows G,G,G,G,G,G,G
        }

ご覧のとおり、最後listにすべての値が最近のpayss値 (G) を持つ変数があります。なぜ私がその問題に直面しているのか考えてみてください。助けてくれてありがとう。

4

4 に答える 4

3

オブジェクトを1 つだけ使用Mapし、それをリストに数回追加します。最初のループでは、エントリは常に上書きされます (マップが 1 つしかないため)。したがって、明らかに最後の値だけが生き残ります。

于 2012-12-29T11:39:59.250 に答える
2
Map<String,Object> map = new HashMap<String,Object>();

上記の行を for ループに記述します。その非常にばかげた間違い;) :)

于 2012-12-29T11:40:37.163 に答える
1

for ループで新しいマップを作成する必要があります。

for (int i=0;i<payss.size();i++){

        map = new HashMap<String, Object>();

        Bitmap contact_pic=pays_drapeaux.get(i);   
        drawable=new BitmapDrawable(contact_pic); 
        map.put("pays", payss.get(i).getNom());
        Log.i("PAYS",payss.get(i).getNom()); //here it shows correctly the values one by one
        map.put("drapeau",drawable);

        list.add(map);

       }
于 2012-12-29T11:46:56.250 に答える
0

昨夜は解決策が見つかりませんでしたが、今朝はすっきりしました:D. 解決策は次のとおりです。すべての for ループで Map を作成する必要があります。

for (int i=0;i<payss.size();i++){
                Map<String,Object> map = new HashMap<String,Object>();

                Bitmap contact_pic=pays_drapeaux.get(i);   
                drawable=new BitmapDrawable(contact_pic); 
                 map.put("pays", payss.get(i).getNom());
                 map.put("drapeau",drawable);
                Log.i("PAYS",payss.get(i).getNom());

                 list.add(map);
}
于 2012-12-29T11:40:00.453 に答える