HashMap仅将循环中的最后一个值附加到listview

时间:2013-06-23 19:29:38

标签: java android hashmap

我正在拆分字符串,然后将每个拆分值附加到一个hashmap,然后将其设置为SimpleListAdapter。但是只有最后一个值来自 split方法附加到listview。 代码:

for (String set : splitSet)
                {  
                 key=splitSet[0];
                 value1= splitSet[1];
                 value2 = splitSet[2];
                 }
                hmap = new HashMap<String, String>();
                hmap.put( key, value1);
                hmap.put(key, value2);

              listrows = new ArrayList<Map<String, String>>();
              listrows.add(hmap);

           //attach values to listview

           ListAdapter adapter = new SimpleAdapter(
                                    MainActivity.this, listrows,
                                    R.layout.list_item, new String[] {
                                            value1,value2},
                                    new int[] { R.id.value1,R.id.value2});
                            // updating listview
                            lv.setAdapter(adapter);

listview输出应该是以下整数:

    value1
    value2

    value1
    value2
    .............

但是我只从分割结果中获取最后一个值。这有什么不对?

2 个答案:

答案 0 :(得分:1)

你只有在{<1}}和之后才能创建地图并填充它 - 只有最后一个值,显然......重新格式化,你的代码给出:

splitSet

而你可能意味着:

for (String set : splitSet) {  
    key = splitSet[0];
    value1 = splitSet[1];
    value2 = splitSet[2];
}
hmap = new HashMap<String, String>();
hmap.put(key, value1);
hmap.put(key, value2);

但仍然存在一个问题:您将两个值都放在同一个键中。 hmap = new HashMap<String, String>(); for (String set : splitSet) { key = splitSet[0]; value1 = splitSet[1]; value2 = splitSet[2]; hmap.put(key, value1); hmap.put(key, value2); } 在这里丢失了。你可能也不是这个意思。也许使用value1 s作为值而不是List<String> s?在这种情况下,代码变为:

String

答案 1 :(得分:0)

从字面上看,您要将最后一个值添加到Hashmap,因为您在for循环终止后添加了值。这导致在Hashmap中插入最后一个选定的值只需更改for循环中的花括号位置,并在HashMap循环构造之前创建for对象:

hmap = new HashMap<String, String>();
for (String set : splitSet)
{  
    key=splitSet[0];
    value1= splitSet[1];
    value2 = splitSet[2];
    //}//Comment it
    hmap.put( key, value1);
    hmap.put(key, value2);
}