2014-10-23 3 views
0

Я хочу показать каждую пару ключей-значений в хэш-карте в нескольких столбцах ListView. Я создал пользовательский адаптер для списка, но я не могу понять, как я могу получить значения всех ключей.Отображение пар значений ключа hashmap в listview

MyAdapter.java: 

    public final class MyAdapter { 

     private Activity activity; 
     private HashMap<String, String> map; 

     public MyAdapter(Activity activity, HashMap<String, String> map) { 
      this.activity = activity; 
      this.map = map; 
     } 

     public int getCount() { 
      return map.size(); 
     }  

     public View getView(final int position, View convertView, ViewGroup parent) { 
      if (convertView == null) { 
       LayoutInflater inflater = (LayoutInflater) activity 
         .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       convertView = inflater.inflate(R.layout.my_list_item, 
         null); 
      } 

       String key = //GET THE KEY VALUE HERE 
       String value = (String) map.get(key); 
       TextView keyView = (TextView) convertView.findViewById(R.id.item_key); 
       keyView.setText(key); 

       TextView valV = (TextView) convertView.findViewById(R.id.item_value); 
       valV.setText(value); 


      return convertView; 
     }  

     public void setItemList(HashMap<String, String> map) { 
      this.map = map; 
     } 

    } 
+0

Какая ошибка/поведение вы наблюдаете? Скопируйте трассировку стека здесь. – Behnam

+0

Я еще не могу выполнить код, потому что не могу получить значение 'key' –

ответ

0

Карта на самом деле не работает таким образом, вы не можете гарантировать e, если вы перебираете элементы, которые всегда будут в одном порядке, вам следует вместо этого использовать список.

Вы можете, однако, перебрать все элементы в карте, как это:

for (Map.Entry<String, String> entry : map.entrySet()){ 
    System.out.println(entry.getKey() + " : " + entry.getValue()); 
} 

Но обратите внимание, что они не могут, и, вероятно, не всегда будет в том же порядке, что вы положили их. Карты предназначены для хранения значений, которые вы получаете по ключам, а не по индексам (например, со списками или массивами).

@ Решение Campiador предоставит вам все ключи, но вы по-прежнему не сможете ссылаться на них по индексу.

Другим решением может быть перебрать все элементы на карте (см. Выше для цикла) и сохранить ключи в списке, а затем использовать их для вашего ListView и вытаскивать значения с карты каждый раз в функции getView используя что-то вроде этого:

map.get(myList.get(position)); 
+0

Спасибо за предложение! Список был на самом деле гораздо более полезным, чем HashMap. :) Кроме того, ваш код работал отлично. Спасибо. –

0

Там вы идете.

Вы можете получить HashMap ключей с помощью: myMap.keySet() функции, например:

Set<String> = map.keySet(); 

Или, вы можете перебирать HashMap, как это:

public static void iterateMap(Map map) { 
    Iterator iterator = map.entrySet().iterator(); 
    while (iterator.hasNext()) { 
     Map.Entry item = (Map.Entry)iterator.next(); 
     //Do whatever you like with item.getKey() and item.getValue() 
      iterator.remove(); 
     } 
} 

Наконец, вы можете использовать map.entrySet():

for (Map.Entry<String, String> item : map.entrySet()){ 
    //Do as you please with item.getKey() and itme.getValue() 
} 
0

в конструкторе получить entrySet и создать массив из него:

Map.Entry<String, String>[] entryArray = map.entrySet().toArray(new Map.Entry<String, String>[0]); 

Тогда в GetView:

String key = entryArray[position].getKey(); 
String value = entryArray[position].getValue(); 
Смежные вопросы