Android 为什么我的arraylist只更改一个元素中的数据?

Android 为什么我的arraylist只更改一个元素中的数据?,android,listview,arraylist,android-contacts,phone-number,Android,Listview,Arraylist,Android Contacts,Phone Number,我有3个数组列表最终目标是将我的listview中的所有电话号码更改为联系人姓名。 fetchContactNumbers()返回设备中所有电话号码(31)的列表 fetchContactNames()返回设备中所有联系人姓名(31)的列表 新列表中有6个电话号码 我所做的是根据fetchContactNumbers()的位置将newList中的数字更改为fetchContactNames()中相应的名称。因此,由于fetchContactNumbers()和fetchContactNames(

我有3个数组列表最终目标是将我的listview中的所有电话号码更改为联系人姓名。

fetchContactNumbers()返回设备中所有电话号码(31)的列表

fetchContactNames()返回设备中所有联系人姓名(31)的列表

新列表中有6个电话号码

我所做的是根据fetchContactNumbers()的位置将newList中的数字更改为fetchContactNames()中相应的名称。因此,由于fetchContactNumbers()和fetchContactNames()的元素顺序正确,newList将在fetchContactNumbers()中查找匹配项,索引该位置,然后在fetchContactNames()中使用该位置将newList中的数字设置为其代表名称。 下面是我为测试更清晰的图片而做的一个示例:

作为控制台应用程序进行测试的示例:

以下是我的活动中的代码:

    // 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));
        }
    }
//将显示的号码更改为联系人姓名
对于(int i=0;i
从那里,newList被传递到我的CustomAdapter类中以填充我的listview

上述代码的问题(根据我的示例是正确的)是,当我在我的应用程序中运行此代码时,仅newList.get(3)更改其正确名称。


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

您可以按如下方式构建地图。如果您看重字母排序而不是效率,请使用树映射而不是哈希映射

    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));
    }
Map contacts=newhashmap;
列表编号=fetchContactNumber();
列表名称=fetchContactNames();
对于(int i=0;i
确保还导入了HashMap和Map

import java.util.HashMap

import java.util.Map


然后,只需重写CustomAdapter即可用于HashMap。是否有一些关于如何使用HashMap的示例,您没有想到要使用HashMap来实现此目标?当您有两个数字和名称的数组列表时,您的HashMap似乎是更好的方法,
HashMap
@hawaii.five-0我如何实现这一点?只需创建包含名称和数字的HasMap,名称将是键和数字值,它将更有效、更简单。@hawaii.five-0您有关于如何实现这一点的教程吗?我已经找过了,但似乎找不到与我的处境有关的任何东西。