使用 SortedList 和 RecyclerView 更改排序顺序
Change sorting order with SortedList and RecyclerView
我正在使用 SortedList
,它用于过滤 RecyclerView
中关于 SearchView
中的当前查询的数据,如 中所述].
问题是项目的顺序也必须能够改变。 SortedList
通过具有 compare
方法的 Callback
class 与 Adapter
交互。如果用户更改了项目的排序方式,我将需要更改它,但我不确定该怎么做。
目前的情况只要求颠倒顺序,所以这个问题可以用 LinearLayoutManager
和 setReversedLayout(true)
来解决,但我想知道如何提供一种完全不同的方式对 SortedList
.
中的项目进行排序
SortedList
API 不支持列表排序条件的动态变化。它旨在支持一次更改特定项目或一批项目的排序标准。例如,支持的场景可能是当项目 X 优先级值增加时,列表按优先级排序。但不是当排序条件变为按日期排序时。
你的案子已经按照你的方式得到了最好的解决,setReversedLayout()
。另一种(相对干净的)方法可能是使用支持新排序的 SortedList.Callback
的不同实例实例化一个新的 SortedList,添加旧列表中的所有项目,指示 ViewHolder
使用新列表,并在 Adapter
.
上触发 notifyDataSetChanged()
您不能动态更改排序策略,因为排序列表对每个实例都有一个排序顺序("do sorting again" 没有方法)。
您可以使用
recyclerView.swapAdapter(newAdapter, false);`
如果您的适配器中有稳定的 ID,您将获得一个不错的动画。因为 swapAdapter()
帮助 RecyclerView 重用视图持有者。
我正在使用 SortedList
,它用于过滤 RecyclerView
中关于 SearchView
中的当前查询的数据,如
问题是项目的顺序也必须能够改变。 SortedList
通过具有 compare
方法的 Callback
class 与 Adapter
交互。如果用户更改了项目的排序方式,我将需要更改它,但我不确定该怎么做。
目前的情况只要求颠倒顺序,所以这个问题可以用 LinearLayoutManager
和 setReversedLayout(true)
来解决,但我想知道如何提供一种完全不同的方式对 SortedList
.
SortedList
API 不支持列表排序条件的动态变化。它旨在支持一次更改特定项目或一批项目的排序标准。例如,支持的场景可能是当项目 X 优先级值增加时,列表按优先级排序。但不是当排序条件变为按日期排序时。
你的案子已经按照你的方式得到了最好的解决,setReversedLayout()
。另一种(相对干净的)方法可能是使用支持新排序的 SortedList.Callback
的不同实例实例化一个新的 SortedList,添加旧列表中的所有项目,指示 ViewHolder
使用新列表,并在 Adapter
.
notifyDataSetChanged()
您不能动态更改排序策略,因为排序列表对每个实例都有一个排序顺序("do sorting again" 没有方法)。
您可以使用
recyclerView.swapAdapter(newAdapter, false);`
如果您的适配器中有稳定的 ID,您将获得一个不错的动画。因为 swapAdapter()
帮助 RecyclerView 重用视图持有者。