2015-10-23 30 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重新使用视图持有者。

相关问题