1

私は3つの配列リストを持っています。最終的な目標は、リストビューのすべての電話番号を連絡先の名前に変更することです。

fetchContactNumbers()は、デバイス内のすべての電話番号 (31) のリストを返します。

fetchContactNames()は、デバイス内のすべての連絡先名 (31) のリストを返します。

newListには 6 つの電話番号が含まれています。

私がやっていることは、fetchContactNumbers() の位置に従って、newList 内の番号を fetchContactNames() の対応する名前に変更することです。したがって、fetchContactNumbers() と fetchContactNames() の要素は正しい順序になっているため、newList は fetchContactNumbers() で一致するものを探し、その位置にインデックスを付け、fetchContactnames() でその位置を使用して newList の番号を次のように設定します。その代表的な名前。より鮮明な画像をテストするために作成した例を次に示します。

コンソール アプリとしてテストする例: http://pastebin.com/pApHNkXa

私の活動のコードは次のとおりです。

    // change displayed numbers into contact names
    for(int i = 0; i < newList.size(); i++){
        int index = fetchContactNumbers().indexOf(newList.get(i));
        if(fetchContactNumbers().contains(newList.get(i))){

            newList.set(i, this.fetchContactNames().get(index));
        }
    }

そこから、newList が CustomAdapter クラスに渡され、リストビューに入力されます。

上記のコード (私の例に基づいて正しい) の問題は、アプリでこれを実行すると、newList.get(3) のみが正しい名前に変更されることです。

すべてではなく 1 つの名前だけが変更されている理由を知っている人はいますか? logcat を確認したところ、エラーなしで同じことが表示されます。

4

1 に答える 1

0

次のようにマップを作成できます。効率よりもアルファベット順の並べ替えを重視する場合は、HashMap の代わりに TreeMap を使用します。

    Map<String,String> contacts = new HashMap<String,String>;
    List<String> numbers = fetchContactNumbers();
    List<String> names = fetchContactNames();

    for(int i = 0; i < numbers.size(); i++)
    {
        contacts.put(numbers.get(i),names.get(i));
    }

HashMap と Map も必ずインポートしてください

import java.util.HashMap;

import java.util.Map;

次に、HashMap で機能するように CustomAdapter を書き直します。HashMap の使用方法の例を次に示します

于 2012-08-08T19:46:34.997 に答える