[英]HashMap only appending last value from a loop to the listview
我正在分割一個字符串,然后將每個分割值附加到一個hashmap上,然后將其設置為SimpleListAdapter。然而,只有split方法的最后一個值才追加到了列表視圖中。 編碼:
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
.............
但我只是從分割結果中獲取最后一個值。怎么了?
您遍歷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
在這里丟失。 您可能也不是這個意思。 也許使用List<String>
作為值而不是String
? 在這種情況下,代碼變為:
hmap = new HashMap<String, List<String>>();
List<String> list;
for (String set : splitSet) {
key = splitSet[0];
value1 = splitSet[1];
value2 = splitSet[2];
list = new ArrayList<String>();
hmap.put(key, list);
list.add(value1);
list.add(value2);
}
從字面上看,您正在將最后一個值添加到Hashmap
因為您是在for
循環終止后添加值。 這導致在Hashmap
插入最后選擇的值。只需在for循環中更改大括號位置,並在for
循環構造之前創建HashMap
對象:
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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.