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) 更改为正确的名称。

有谁知道为什么只有一个名字在改变而不是全部?我检查了 logcat,它显示相同的东西,没有错误。

4

1 回答 1

0

您可以按如下方式构建地图。如果您重视字母排序而不是效率,请使用 TreeMap 而不是 HashMap。

    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;

然后只需重写您的 CustomAdapter 即可为 HashMap 工作。下面是一些关于如何使用 HashMap 的示例

于 2012-08-08T19:46:34.997 回答