我想在多列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 :(得分: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();