簡體   English   中英

HashMap僅將循環中的最后一個值附加到listview

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM