Android检查arraylist中的字符串是否相等

时间:2015-05-10 13:54:19

标签: java android arraylist

大家好我的名单有问题。我需要检查一个字符串是否等于我的arraylist中的一个字符串。到目前为止,如果列表中只有一个相等的字符串匹配,它就可以正常工作。但是,如果有两个或更多字符串,则只匹配一个。

这是我迄今为止所尝试过的:

viewHolder.tv.setText(namesList.get(position));
viewHolder.tvEmailAddress.setText(emailsList.get(position));

if (ConnectionDetector.hasNetworkConnection(getActivity())) {
    if(registeredContactsList != null) {
        for(String email : registeredContactsList) {
           if( emailsList.get(position).equals(email) ) {
               Log.d(TAG, "Registered: " + email);
               viewHolder.tvRegistered.setText("Add to Friends");
           } else {
               viewHolder.tvRegistered.setText("Invite");
           }
        }
    } else {
        viewHolder.tvRegistered.setVisibility(View.GONE);
    }
} else {
    viewHolder.tvRegistered.setVisibility(View.GONE);
}

更新

final int emailIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA);
String contactId, displayName, emailAddress;
while (cursor.moveToNext()) {
        contactId = cursor.getString(contactIdIndex);
        displayName = cursor.getString(displayNameIndex);
        emailAddress = cursor.getString(emailIndex);
        idsList.add(contactId);
        namesList.add(displayName);
        emailsList.add(emailAddress);
}

我应该得到两个

  Add to Friends
在我的列表视图中。假设我在arraylist中匹配了两个字符串。

为什么我只得到一个匹配的字符串?任何帮助将不胜感激。感谢。

2 个答案:

答案 0 :(得分:2)

假设您要查找的电子邮件是“john@foo.com”。

假设该列表包含“alice@foo.com”,“john@foo.com”和“jack@foo.com”。

您的算法有何功能?它循环遍历所有元素,并在每次迭代时设置tvRegistered的文本:

  • 第一次迭代:alice不等于john,因此文本设置为“Invite”
  • 第二次迭代:john等于john,所以文本设置为“Add to Friends”
  • 第三次迭代:jack不等于john,因此文本设置为“Invite”。

然后循环停止。

没有理由多次设置文本。您的方法太长,并且没有使用列表中的正确方法。

你只需要

if (registeredContactsList != null) {
    if (registeredContactsList.contains(email)) {
        Log.d(TAG, "Registered: " + email);
        viewHolder.tvRegistered.setText("Add to Friends");
    } 
    else {
        viewHolder.tvRegistered.setText("Invite");
    }
}

答案 1 :(得分:0)

我认为问题出现在你的registeredContactsList中,因为当多个电子邮件添加到列表中时,新邮件会覆盖旧邮件,这会使您只获得一个存储在列表中的电子邮件,即使它重复了百万次,检查列表大小以确保。