我正在使用一个SortedList
来过滤RecyclerView
中与How to filter a RecyclerView with a SearchView中所述的SearchView
中的当前查询相关的数据。
问题是物品的顺序也必须能够改变。SortedList
通过具有Adapter
方法的Callback
类与compare
交互。如果用户更改了项目的排序方式,我需要更改它,但我不确定如何才能做到这一点。
目前的情况只需要颠倒顺序,所以这个问题可以用LinearLayoutManager
和setReversedLayout(true)
来解决,但是我想知道如何提供一种完全不同的方式来对SortedList
中的项目进行排序。
最佳答案
SortedList
api不支持列表排序条件的动态更改。它旨在支持一次更改特定项或一批项的排序条件。例如,支持的场景可能是当项目x优先级值增加时,列表按优先级排序。但如果排序条件更改为按日期排序,则不会。
你的案子是最好的解决方式,用setReversedLayout()
。另一种(相对干净的)方法是用支持新排序的不同实例SortedList.Callback
实例化一个新的sortedlist,添加旧列表中的所有项,指示ViewHolder
改用新列表,并在notifyDataSetChanged()
上触发Adapter
。