【问题标题】:Android - ArrayList.contains do not work properlyAndroid - ArrayList.contains 无法正常工作
【发布时间】:2015-10-04 20:04:44
【问题描述】:

有一个ArrayList 的对象,我正在检查列表是否包含 if 语句中的对象,并且该数组不包含该对象。然而它仍然在 if 语句中..

@Override
public void onBindViewHolder(final LabelViewHolder feedListRowHolder, int i) {

final Label label = mLabels.get(i);

//find the views and bind the data
feedListRowHolder.checkBox.setText(label.getCaption());
if (mStartCallLabels.contains(label) && !mNeedToRemoveLabels.contains(label)) {
    feedListRowHolder.checkBox.setChecked(true);
} else if (mNeedToAddLabels.contains(label)) {
    feedListRowHolder.checkBox.setChecked(true);
} else {
    feedListRowHolder.checkBox.setChecked(false);
}

上面的代码显示了我的适配器的“getView”,我正在从列表中设置标签对象, 由于某种原因,它进入了第一个 if 语句,即带有 mStartCallLabels 和 mNeedToRemoveLabels 的语句。

下面的图片包含 DebugMode 断点,它刚刚进入 if.. 你可以看到该数组列表中不存在 "label" 对象.. "label" 的 "caption" 字符串值完全不同的! 我做错了什么?

mStartCallLabels.size == 3,mNeedToRemoveLabels.size == 0。

所以基本上,出于某种原因,

mStartCallLabels.contains(label)

返回 true.. 它不应该!有什么想法吗?

【问题讨论】:

    标签: android arraylist contains


    【解决方案1】:

    Label,据我了解,是您的班级。当您在 ArrayList 上调用 contains 时,在将您的对象与列表中的对象进行比较时,它实际上会调用 equals。请确保您的 equals 方法为这些标签返回 false。

    【讨论】:

      猜你喜欢
      • 2017-03-10
      • 2012-09-13
      • 2012-03-24
      • 2012-11-03
      • 2013-11-24
      • 1970-01-01
      • 2014-09-17
      • 2011-07-04
      • 2015-06-04
      相关资源
      最近更新 更多