android.support.v7.util.SortedList

时间:2016-07-18 16:45:35

标签: java android

我正在使用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上找到项目索引。感谢

1 个答案:

答案 0 :(得分:3)

SortedList的indexOf方法非常依赖于包含对象正确实现的hashCode()和equals()方法。

保证默认的Object实现在您的情况下不起作用。

您可以自己实现它们,您可以选择让Android Studio为您生成方法,也可以使用Project Lombok的@EqualsAndHashCode注释在编译时生成它们。可能还有其他选择 - 这些是首先想到的。