2015-10-23 60 views
1

我有一個modelrankname參數。如何使用帶有RecyclerView的SortedList對不同的參數進行排序?

使用可以選擇排序或按名稱排序,我這樣做是什麼把一個標誌排序列表的compare方法裏面,像這樣:

if (sortByRank) { 
    return o1.getRank() > o2.getRank() ? LESS_THAN : 
     (o1.getRank() == o2.getRank() ? EQUALS : GREATER_THAN); 
} 

return o1.getName().compareTo(o2.getName()); 

然後在我的適配器我有一個方法設置排序參數:

public void sortByRank(boolean sort) { 
    if (sort) { 
     sortByRank = true; 
    } else { 
     sortByRank = false; 
    } 

    notifyDataSetChanged(); 
} 

我想notifyDatasetChanged將促使compare的方法,但事實並非如此。關於如何一次更新所有想法?

回答

0

SortedList在添加任何元素時對元素進行排序。所以,如果你像這樣編寫你的比較函數,你將按排名或名稱排序最後一個元素。所以整體分類對你來說沒有任何意義。

在SortedList中沒有「再次排序」的方法。您更改數據適配器以進行動態排序。

recyclerView.swapAdapter(newAdapter, false);` 

如果你的適配器中有穩定的id,你會得到一個很好的動畫。因爲swapAdapter()幫助RecyclerView重新使用視圖持有者。

相關問題