2013-06-23 33 views
0

我在分割一個字符串,然後將每個分割值附加到一個散列表,然後將其設置爲一個SimpleListAdapter.However只有最後一個值從 split方法被附加到列表顯示。 代碼:HashMap只將最後一個值從循環附加到列表視圖

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 
    ............. 

但我只是正從分裂result.what的錯誤的最後一個值?

回答

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。你可能不是這個意思。也許使用List<String>作爲值而不是String s?在這種情況下,代碼變爲:

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); 
} 
+0

thanks.done爲你的建議,然後我得到hmap.put(key,list)上的紅色標記;說明我將列表類型更改爲字符串..如果我這樣做,我將無法將value1和value2添加到它.. –

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); 
} 
相關問題