我正在使用android.support.v7.util.SortedList来绑定RecyclerView上的数据。一切正常,但当我尝试更新数据时,indexOf(obj)
总是返回-1。
private int findItem(ZoneContactLoaderAdapter mAdapter, ContactModel contactModel) {
// int index = Collections.binarySearch(mAdapter.getContactModel(), contactModel, new BinarySearchWithComparator());
return mAdapter.getContactModel().indexOf(contactModel);
}
逻辑是这样的:
int position = findItem(zoneContactLoaderAdapter, notificationContactModel);
if (position < 0) {
ContactModel adapterContactModel = new ContactModel(conversationID, Constants.ACCOUNT_TYPE, conversationName, "", null, conversationName, conversationID, false);
updateAdapterModel(adapterContactModel, notificationContactModel);
zoneContactLoaderAdapter.getContactModel().add(adapterContactModel);
} else {
notificationContactModel.setIsConversation(true);
ContactModel adapterContactModel = zoneContactLoaderAdapter.getItem(position);
updateAdapterModel(adapterContactModel, notificationContactModel);
zoneContactLoaderAdapter.getContactModel().updateItemAt(position, adapterContactModel);
}
该位置始终返回-1并复制数据。 试过这个thread的解决方案,它仍然无法正常工作。因此,我考虑使用this作为示例在列表本身上实现自定义二进制搜索。但是收藏只需要List。
有什么更好的方法可以在android.support.v7.util.SortedList上找到项目索引。感谢
答案 0 :(得分:3)
SortedList的indexOf方法非常依赖于包含对象正确实现的hashCode()和equals()方法。
保证默认的Object实现在您的情况下不起作用。
您可以自己实现它们,您可以选择让Android Studio为您生成方法,也可以使用Project Lombok的@EqualsAndHashCode注释在编译时生成它们。可能还有其他选择 - 这些是首先想到的。