1

我使用的SortedList用於篩選RecyclerView中關於當前查詢的SearchView中的數據,如How to filter a RecyclerView with a SearchView中所述。使用SortedList和RecyclerView更改排序順序

問題是,項目的順序也必須能夠改變。 SortedList通過具有compare方法的Callback類與Adapter交互。我需要改變它,如果用戶改變物品的排序方式,但我不知道如何做到這一點。

目前的局勢要求只爲順序的顛倒,所以這個問題可能與setReversedLayout(true)一個LinearLayoutManager來解決,但我有興趣我怎麼能提供分揀在SortedList的項目完全不同的方式。

回答

1

SortedList API不支持列表排序條件的動態更改。它旨在支持一次性更改特定項目或一批項目的分類標準。例如,受支持的方案可能是項目X優先級值增加,並且列表按優先級排序。但是,當排序條件改變爲按日期排序時不行。

你的情況是最好的解決了你的做法,用setReversedLayout()。另一種(相對乾淨的)方法可以是實例化具有支持新排序的不同實例SortedList.Callback的新SortedList,添加來自舊列表的所有項目,指示ViewHolder改爲使用新列表,並且在Adapter上觸發notifyDataSetChanged()

1

您無法動態更改排序策略,因爲排序列表對於每個實例都有一個排序順序(沒有「再次排序」的方法)。

您可以使用

recyclerView.swapAdapter(newAdapter, false);` 

如果你有穩定的id在適配器中,你會得到一個漂亮的動畫。因爲swapAdapter()可幫助RecyclerView重新使用查看人員。