强制度假的Android appcompat`SortedList`?

时间:2015-09-07 11:10:19

标签: android android-recyclerview android-appcompat

我的RecyclerViewRecyclerView.Adapter中显示SortedList

我使用Comparator方法使用2个自定义SortedListAdapterCallback.compare()个实例来对A-Z或Z-A进行排序。

static class A2Z implements Comparator<Item> {
    @Override
    public int compare(Item t0, Item t1) {
        return t0.mText.compareTo(t1.mText);
    }
}
static class Z2A extends A2Z {
    @Override
    public int compare(Item t0, Item t1) {
        return -1 * super.compare(t0, t1);
    }
}

Item只包含一个String mText;

我在SortedListAdapterCallback.compare()方法中使用我的比较器:

private Comparator<Item> a2z = new A2Z();
private Comparator<Item> z2a = new Z2A();
private Comparator<Item> comparator = z2a;

        @Override
        public int compare(Item t0, Item t1) {
            return comparator.compare(t0, t1);
        }

我按下按钮更改比较器。屏幕上的列表不会更新。

在各种方法中记录值后,我可以看出列表本身没有更新。通知适配器更改只需重新绘制旧列表,而无需使用它。

那么我如何强制基础SortedList诉诸所有项目?

也许最好每次都创建一个新的Adapter,就像这个问题一样:

2 个答案:

答案 0 :(得分:1)

SortedList没有自行求助的功能 - 每个实例只有一个排序顺序。

根据Yigit's answer to the above referenced question

为每个度假村创建一个新的适配器
  

如果您的适配器中有稳定的ID,则可以获得相当好的效果   结果(动画)如果您创建一个包含已过滤的新数组   物品和电话

recyclerView.swapAdapter(newAdapter, false);
     

使用swapAdapter提示它可以重复使用视图持有者的RecyclerView。   (在setAdapter中,它必须回收所有视图并重新创建,因为   它不知道新适配器具有相同的ViewHolder设置   旧的适配器)。

答案 1 :(得分:0)

在compare方法内部使用带有本地控制标志的switch语句(枚举是个好主意)。

更改切换标志后,调用sortedList.replaceAll。

@Override
        public int compare(PmpRole pmpRoleA, PmpRole pmpRoleB) {

            switch (mSorter){
                case IDX:
                    return pmpRoleA.getIdx().compareTo(pmpRoleB.getIdx());
                case TITLE:
                    return pmpRoleA.getTitleIdx().compareTo(pmpRoleB.getTitleIdx());
                case ID_IDX:
                    return pmpRoleA.getIdIdx().compareTo(pmpRoleB.getIdIdx());

            }
            return -1;
        }


public void setSorter(Sorter sorter){
        mSorter = sorter;
        mPmpRoleSortedList.replaceAll(mPmpRoles);
    }

保持动画功能等。