我使用SortedList在一些参数上对我的数据进行排序让我们在RecyclerView中说" Date"以便在加载大量数据时提高性能。但我观察到它非常奇怪的行为。首先,lemme放了一些代码 -
mMatchesList = new SortedList<>(Matches.class, new SortedList.Callback<Matches>() {
@Override
public int compare(Matches o1, Matches o2) {
int result = 0;
try {
result = DateTimeOperationUtil.dateComparator("dd-MMM-yyyy", o2.MatchDate, o1.MatchDate);
} catch (ParseException e) {
e.printStackTrace();
}
return result;
}
@Override
public void onChanged(int position, int count) {
notifyItemRangeChanged(position, count);
}
@Override
public boolean areContentsTheSame(Matches oldItem, Matches newItem) {
return oldItem.equals(newItem);
}
@Override
public boolean areItemsTheSame(Matches item1, Matches item2) {
return item1.hashCode() == item2.hashCode();
}
@Override
public void onInserted(int position, int count) {
notifyItemRangeInserted(position, count);
}
@Override
public void onRemoved(int position, int count) {
notifyItemRangeRemoved(position, count);
}
@Override
public void onMoved(int fromPosition, int toPosition) {
notifyItemMoved(fromPosition, toPosition);
}
});
在这里,我有一些匹配
我想按降序排序日期
。第一次,订单和我想要的一样但是
当我更改任何比赛的日期时,那应该根据 定义订单。但它没有发生,数据也没有改变 这个清单。
EDITED 我使用以下代码更新了我的列表:
if (mMatchesList.indexOf(matches) != -1)
mMatchesList.updateItemAt(mMatchesList.indexOf(matches), matches);
My Matches模型类实现了equals()和hashcode()。
告诉我我做错了什么。
答案 0 :(得分:0)
您尚未正确实施areItemsTheSame
方法。你应该检查两个项目是否相同,即你是通过id检查(主键是否为数据库模型)或其他一些可以告诉你两个对象是否相同的方法,而不是hashCode
。可以为两个不同的模型使用相同的哈希码。
阅读hashCode
方法documentation.