我面临一个奇怪的问题,我没有找到任何解释,我会在代码中评论如下:
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)。不知道我为什么要面对这个问题。
谢谢你的帮助。
答案 0 :(得分:3)
您只使用一个Map
对象,并将其多次添加到列表中。在第一个循环中,条目总是被覆盖(因为只有一个映射)。很明显,只有最后的价值才能存活下来。
答案 1 :(得分:2)
Map<String,Object> map = new HashMap<String,Object>();
在for循环中写上面的行。它非常愚蠢的错误;):)
答案 2 :(得分: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);
}
答案 3 :(得分: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);
}