gpt4 book ai didi

Android SortedList 删除方法正在跳过项目

转载 作者:行者123 更新时间:2023-12-05 07:36:03 28 4
gpt4 key购买 nike

我在 RecyclerView 中遇到 Android SortedList 的问题,主要是 remove 方法:
public void replaceAll(List userFertList, List defaultFertList){ restartIndexes(userFertList,defaultFertList); mComparator.swapLists(Utils.fertiliserListToNameList(userFertList));

    List<Fertiliser> combinedList = Utils.combineFertLists(userFertList, defaultFertList);

mSortedList.beginBatchedUpdates();
for (int i = mSortedList.size() -1; i > -1 ; i--) {
final Fertiliser fertiliser = mSortedList.get(i);
if(!combinedList.contains(fertiliser)){
if(!mSortedList.remove(fertiliser)){
throw new RuntimeException();
};
}
}

mSortedList.addAll(combinedList);
mSortedList.endBatchedUpdates();
}

上面的代码是在过滤列表的时候执行的。新列表中不存在的所有对象都将被删除。但是,删除对象的调用有时会失败。我知道该对象存在,因为它取自 SortedList 本身。

我的研究提示我的 Comparator 比较方法有问题:

        @Override
public int compare(Fertiliser fertiliser, Fertiliser t1) {
if(fertiliser == t1){
return 0;
}

if(mUserFertNames.contains(fertiliser.getName()) != mUserFertNames.contains(t1.getName())){
return mUserFertNames.contains(fertiliser.getName()) ? -1 : 1;
} else {
return fertiliser.getName().compareToIgnoreCase(t1.getName());
}
}

我按两个标准排序(一个是检查对象是否存在于列表中,另一个是按名称)。

所以我的想法是,因为 SortedList 使用 Comparator 来定位元素,所以我的 Comparator 给出了错误的结果,列表找不到该项目:从 SortedList 中调用的方法:

    private int findIndexOf(T item, T[] mData, int left, int right, int reason) {
while (left < right) {
final int middle = (left + right) / 2;
T myItem = mData[middle];
final int cmp = mCallback.compare(myItem, item);
if (cmp < 0) {
left = middle + 1;
} else if (cmp == 0) {
if (mCallback.areItemsTheSame(myItem, item)) {
return middle;
} else {
int exact = linearEqualitySearch(item, middle, left, right);
if (reason == INSERTION) {
return exact == INVALID_POSITION ? middle : exact;
} else {
return exact;
}
}
} else {
right = middle;
}
}
return reason == INSERTION ? left : INVALID_POSITION;
}

但是我找不到解决方案。你能帮帮我吗?

附言当我检查错误时,两个对象都不在列表中(因此它们仅按名称进行比较)。

最佳答案

尝试使用 .removeItemAt(i) 而不是 .remove(fertiliser)。这在过滤列表时对我有用。

关于Android SortedList 删除方法正在跳过项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49307808/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com