0

我有一个全局定义的 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,我总是将键作为'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);                                    
        }               
    }
});

我想要2 个单独的字符串中的选定索引的Name和。Phone我怎么做?

4

1 回答 1

1

我建议不要像您那样拥有 Map ,而是创建一个名为Contact. 然后您的 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 即可获得所需的值。您的代码应如下所示:

Map<String, String> map = (Map<String, String>) av.getItemAtPosition(index);
String phoneNumber = map.get("Phone");
String name = map.get("Name");
于 2012-07-10T21:26:24.630 回答