android支持SortedList在调用addAll后会得到重复的条目

时间:2016-02-23 12:49:34

标签: android android-recyclerview android-support-library

使用android支持库com.android.support:recyclerview-v7:23.1.1

在使用一堆项目调用SortedList.addAll()之后,列表可能会以重复项结束。特别是,如果新添加的项目存在但会以影响其排序的方式进行更改,则会发生这种情况。

代码示例:

    class TestItem {
        final int id;
        final String name;

        TestItem(int id, String name) {
            this.id = id;
            this.name = name;
        }
    }

    SortedList<TestItem> list = new SortedList<TestItem>(TestItem.class, new Callback<TestItem>
            () {
        @Override
        public int compare(TestItem o1, TestItem o2) {
            if (areItemsTheSame(o1, o2)) {
                return 0;
            } else {
                return o1.name.compareTo(o2.name);
            }
        }

        // onXxx methods left out for readability

        @Override
        public boolean areContentsTheSame(TestItem oldItem, TestItem newItem) {
            return oldItem.name.equals(newItem.name);
        }

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

    list.add(new TestItem(1, "Bravo"));
    list.add(new TestItem(2, "Charlie"));
    list.addAll(new TestItem(2, "Alpha"));

运行此代码后,列表将包含[Alpha, Bravo, Charlie],而不是[Alpha, Bravo] Alpha Charlie应该替换 newItems

最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

我已将此作为bug提交给Google。

针对一组新项list.beginBatchedUpdates(); for (TestItem item : newItems) { list.add(item); } list.endBatchedUpdates();

的工作变通方法
<a>