在列表视图中显示hashmap的键值对

时间:2014-10-23 06:58:07

标签: java android listview android-listview hashmap

我想在多列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;
        }

    }

3 个答案:

答案 0 :(得分:0)

你去吧。

您可以使用:myMap.keySet()函数检索HashMap密钥,如下所示:

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()
}

答案 1 :(得分:0)

地图并没有真正起作用,你不能保证如果你遍历项目,它们总是以相同的顺序,你应该考虑使用一个列表。

但是,您可以迭代地图中的所有项目,如下所示:

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

但是请注意,它们可能不会,也可能不会总是与您放入它们的顺序相同。地图旨在存储您通过键而不是索引获得的值(就像您使用列表或数组一样) )。

@ Campiador的解决方案将为您提供所有密钥,但您仍然无法通过索引引用它们。

另一种解决方案可能是迭代地图中的所有项目(检查上面的循环)并将密钥存储在列表中,然后将其用于ListView,并每次从地图中提取值getView函数使用类似的东西:

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

答案 2 :(得分: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();