2013-06-23 2 views
0

Я разделяю строку, затем добавляю каждое значение split к хэш-карте, которая затем устанавливается в SimpleListAdapter. Однако только последнее значение от метод split добавляется к Посмотреть список. код:HashMap только добавляет последнее значение из цикла в 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 
    ............. 

, но им только получение последнего значения от раскола 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> s как значения вместо 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 (ключ, список); заявив, что я меняю тип списка на String..which, если я это сделаю, я не смогу добавить value1 и value2 к нему. –

0

Буквально вы добавляете последнее значение в Hashmap, потому что вы добавляете значение после того, как цикл for завершается. Это приводит к вставке последнего выбранного значения в Hashmap Просто измените кудрявое положение кронштейна в вашем цикл и создать конструкцию с 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); 
} 
Смежные вопросы