0

としてグローバルに定義された ArrayList がありArrayList<Map<String, String>> mContactList;ます。

現在、メソッドの 1 つで、次のように 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);                                    
}

常に2つのペアがある(に見える)マップを反復処理しています。

"Name", nameValue
"Phone", phoneValue

必要な値を取得するためにマップを反復処理する必要はありません。コードは次のようになります。

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 に答える