gpt4 book ai didi

java - Android:带有重复项的 SortedList

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:02:34 25 4
gpt4 key购买 nike

我在理解 RecyclerViewSortedList 时遇到一些问题。

假设我有一个非常简单的类,只有一个非常简单的类保存数据:

public class Pojo {
public final int id;
public final char aChar;

public Pojo(int id, char aChar) {
this.id = id;
this.aChar = aChar;
}

@Override
public String toString() {
return "Pojo[" + "id=" + id
+ ",aChar=" + aChar
+ "]";
}
}

我的理解是排序列表不会包含任何重复项。

但是当我有一个带有回调的 SortedList 时:

....

@Override
public boolean areContentsTheSame(Pojo oldItem, Pojo newItem) {
return oldItem.aChar == newItem.aChar;
}

@Override
public int compare(Pojo o1, Pojo o2) {
return Character.compare(o1.aChar, o2.aChar);
}

@Override
public boolean areItemsTheSame(Pojo item1, Pojo item2) {
return item1.id == item2.id;
}

当我添加具有相同 ID 但不同字符的多个项目时,我最终得到了重复项。

sortedList.add(new Pojo(1, 'a'));
sortedList.add(new Pojo(1, 'b'));

我希望列表能够更新项目。现在我有多个项目,即使 areItemsTheSame 返回 true

最佳答案

SortedList 不保留任何 id 映射(因为 API 中没有 id)。因此,当排序标准发生变化时(在您的情况下为 a 到 b),SortedList 无法找到现有元素。

您可以自己保留 id 映射,然后使用如下的添加方法:

void add(Item t) {
Item existing = idMap.get(t.id);
if (existing == null) {
sortedList.add(t);
} else {
sortedList.updateItemAt(sortedList.indexOf(existing), t);
}
idMap.put(t.id, t);
}

您还需要实现一个删除方法以从 idMap 中删除该项目。

关于java - Android:带有重复项的 SortedList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31853678/

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