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

您只使用一个Map对象并将其多次添加到列表中。在第一个循环中,条目总是被覆盖(因为只有一个映射)。很明显,只有最后一个值存在。

于 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 回答