【问题标题】:Change sorting order with SortedList and RecyclerView使用 SortedList 和 RecyclerView 更改排序顺序
【发布时间】:2016-11-15 11:59:42
【问题描述】:
我正在使用SortedList,它用于过滤RecyclerView 中关于SearchView 中的当前查询的数据,如How to filter a RecyclerView with a SearchView 中所述。
问题是项目的顺序也必须能够改变。 SortedList 通过具有compare 方法的Callback 类与Adapter 交互。如果用户更改项目的排序方式,我将需要更改它,但我不确定如何做到这一点。
目前的情况只需要颠倒顺序,所以这个问题可以通过LinearLayoutManager 和setReversedLayout(true) 来解决,但我很想知道如何提供一种完全不同的方式来对项目中的项目进行排序SortedList.
【问题讨论】:
标签:
android
sorting
android-recyclerview
android-support-library
sortedlist
【解决方案1】:
您不能动态更改排序策略,因为排序列表对每个实例都有一个排序顺序(没有“再次排序”的方法)。
你可以使用
recyclerView.swapAdapter(newAdapter, false);`
如果您的适配器中有稳定的 id,您将获得漂亮的动画。因为swapAdapter() 帮助 RecyclerView 重用视图持有者。
【解决方案2】:
SortedList API 不支持动态更改列表排序条件。它旨在支持一次更改特定项目或一批项目的排序标准。例如,支持的场景可能是当项目 X 优先级值增加时,列表按优先级排序。但不是当排序条件变为按日期排序时。
您的案件是通过setReversedLayout() 解决的最佳方式。另一种(相对干净的)方法可能是用支持新排序的SortedList.Callback 的不同实例实例化一个新的SortedList,添加旧列表中的所有项目,指示ViewHolder 改为使用新列表,并触发@ 987654325@Adapter。