使用 SortedList 和 RecyclerView 更改排序顺序

Change sorting order with SortedList and RecyclerView

我正在使用 SortedList,它用于过滤 RecyclerView 中关于 SearchView 中的当前查询的数据,如 中所述].

问题是项目的顺序也必须能够改变。 SortedList 通过具有 compare 方法的 Callback class 与 Adapter 交互。如果用户更改了项目的排序方式,我将需要更改它,但我不确定该怎么做。

目前的情况只要求颠倒顺序,所以这个问题可以用 LinearLayoutManagersetReversedLayout(true) 来解决,但我想知道如何提供一种完全不同的方式对 SortedList.

中的项目进行排序

SortedList API 不支持列表排序条件的动态变化。它旨在支持一次更改特定项目或一批项目的排序标准。例如,支持的场景可能是当项目 X 优先级值增加时,列表按优先级排序。但不是当排序条件变为按日期排序时。

你的案子已经按照你的方式得到了最好的解决,setReversedLayout()。另一种(相对干净的)方法可能是使用支持新排序的 SortedList.Callback 的不同实例实例化一个新的 SortedList,添加旧列表中的所有项目,指示 ViewHolder 使用新列表,并在 Adapter.

上触发 notifyDataSetChanged()

您不能动态更改排序策略,因为排序列表对每个实例都有一个排序顺序("do sorting again" 没有方法)。

您可以使用

recyclerView.swapAdapter(newAdapter, false);` 

如果您的适配器中有稳定的 ID,您将获得一个不错的动画。因为 swapAdapter() 帮助 RecyclerView 重用视图持有者。