我确定我的indexOfValue(E)对象中存在E对象时,SparseArray方法始终返回-1,为什么?我有 :

static final SparseArrayCompat<Long> LOCATION_SHARING_TIME = new SparseArrayCompat<Long>();
static {
    LOCATION_SHARING_TIME.put(0, LOCATION_SHARING_TIME_5s);
    LOCATION_SHARING_TIME.put(1, LOCATION_SHARING_TIME_1m);
    LOCATION_SHARING_TIME.put(2, LOCATION_SHARING_TIME_5m);
    LOCATION_SHARING_TIME.put(3, LOCATION_SHARING_TIME_30m);
    LOCATION_SHARING_TIME.put(4, LOCATION_SHARING_TIME_1h);
}


我不能使用SparseLongArray,因为它支持API 18+,而我的项目至少支持API 9。

最佳答案

因为它使用==而不是等于来确定相等性。请参见该方法的实现:

public int indexOfValue(E value) {
  if (mGarbage) {
  gc();
  }

  for (int i = 0; i < mSize; i++)
  if (mValues[i] == value)
  return i;

  return -1;
}


一种想法是扩展SparseArray,并覆盖用=代替==的方法。

public int indexOfValue(E value) {
  if (mGarbage) {
  gc();
  }

  for (int i = 0; i < mSize; i++)
  if (mValues[i].equals(value))
  return i;

  return -1;
}

关于android - SparseArrayCompat的indexOfValue(E)总是返回-1吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22835293/

10-12 02:54