【发布时间】:2016-11-21 08:59:46
【问题描述】:
我正在使用 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 为例,在列表本身上实现自定义二进制搜索。但是collection只需要List。
有什么更好的方法可以在 android.support.v7.util.SortedList 上找到项目索引。谢谢
【问题讨论】: