[英]Difficulty in iterating over an ArrayList of HashMaps
我有一个全局定义的ArrayList作为ArrayList<Map<String, String>> mContactList;
。
现在,在其中一种方法中,我正在定义一个HashMap,如下所示:
Map<String, String> NamePhoneType = new HashMap<String, String>();
NamePhoneType.put("Name", contactName); //contactName is returned from a query
NamePhoneType.put("Phone", phoneNumber); //phoneNumber is returned from a query
mContactList.add(NamePhoneType);
因此, mContactList
现在看起来像[{Name=Abc, Phone=123}, {Name=def, Phone=456}...]
现在,当我尝试使用以下方法遍历mContactList
,根据索引'456'
不同,我总是会得到键为'Phone'
,值始终为'123'
或'456'
。
public void onItemClick(AdapterView<?> av, View v, int index,long arg) {
Map<String, String> map = (Map<String, String>) av.getItemAtPosition(index);
Iterator<String> myVeryOwnIterator = map.keySet().iterator();
while (myVeryOwnIterator.hasNext()) {
String key = (String) myVeryOwnIterator.next();
String value = (String) map.get(key);
getNumber.setText(value);
}
}
});
我希望所选索引的Name
和Phone
使用2个单独的字符串。 我怎么做?
建议您创建一个名为Contact
的类,而不是像使用Map那样。 然后,您的ArrayList将被声明为
ArrayList<Contact> mContactList;
Contact类看起来像
public class Contact {
private String name;
private String phoneNumber;
public Contact (String name, String phoneNumber) {
this.name = name;
this.phoneNumber = phoneNumber;
}
public String getName() {
return name;
}
public String getPhoneNumber() {
return phoneNumber;
}
}
每当您最终使用嵌套的数据结构时,通常这是重新考虑设计的一种迹象,因为通常会有更好的方法来进行设计。
但是,要回答您的问题; 注意这段代码在做什么。
Map<String, String> map = (Map<String, String>) av.getItemAtPosition(index);
Iterator<String> myVeryOwnIterator = map.keySet().iterator();
while (myVeryOwnIterator.hasNext()) {
String key = (String) myVeryOwnIterator.next();
String value = (String) map.get(key);
getNumber.setText(value);
}
您正在遍历始终显示为两对的地图:
"Name", nameValue
"Phone", phoneValue
无需遍历地图即可获取所需的值。 您的代码应如下所示:
Map<String, String> map = (Map<String, String>) av.getItemAtPosition(index);
String phoneNumber = map.get("Phone");
String name = map.get("Name");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.