【问题标题】:Android - SortedList.indexOf() returns INVALID_POSITIONAndroid - SortedList.indexOf() 返回 INVALID_POSITION
【发布时间】:2017-01-06 19:14:01
【问题描述】:

我遇到了SortedList 的一个非常奇怪的行为。 indexOf 方法返回 INVALID_POSITION,即使在调试器中一切似乎都正常。

适配器workingDayAdapter的方法getWorkingDayItems返回SortedList

如您所见,列表的第三个元素是WorkingDay@4678,它与对象workingDay 是同一个对象。然而,indexOf 方法返回 -1

你能解释一下,为什么会这样吗?在SortedList 中是否有一个已知的或尚未发现的?还是有其他原因?

谢谢。

编辑:

删除 equals 方法的覆盖后,问题仍然存在。

【问题讨论】:

    标签: android sortedlist


    【解决方案1】:

    在我的情况下,这是因为我在将项目添加到列表后修改了对象的属性 localStatus,该属性也用于 compare 方法, SortedList 使用基于 compare 方法输出的二分查找。

    这是我的比较方法

    @Override
    public int compare(SmsWrapper o1, SmsWrapper o2) {
        return o1.localStatus.ordinal() - o2.localStatus.ordinal();
    }
    

    希望对您有所帮助。

    【讨论】:

      【解决方案2】:

      在 java 中的普通列表中,indexOf() 方法与 equals() 方法进行比较(我还没有找到 SortedList 的方法)。可能是您没有覆盖 WorkingDay 类中的 equals() 方法的问题吗?我认为如果您将 WorkingDay@4678 的新实例传递给您的 indexOf() 方法,它会将其分类为 -1。

      【讨论】:

      • 其实问题没有回答,我已经编辑了问题
      • 对不起,那我也不知道答案。它是否适用于任何项目,还是每次都为 -1(当您使用未从 SortedList 获得的 workingDays 时)?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-12
      • 2012-06-22
      • 2012-05-28
      • 2015-12-22
      • 2014-12-05
      • 2021-07-07
      相关资源
      最近更新 更多