我有model
个rank
和name
个参数。
用户可以选择按排名或按名称排序,因此我所做的是在SortedList的compare
方法中放置一个标志,如下所示:
if (sortByRank) {
return o1.getRank() > o2.getRank() ? LESS_THAN :
(o1.getRank() == o2.getRank() ? EQUALS : GREATER_THAN);
}
return o1.getName().compareTo(o2.getName());
然后在我的适配器中我有一个设置sort参数的方法:
public void sortByRank(boolean sort) {
if (sort) {
sortByRank = true;
} else {
sortByRank = false;
}
notifyDataSetChanged();
}
我认为notifyDatasetChanged
会提示compare
方法,但事实并非如此。关于如何一次更新全部的任何想法?
答案 0 :(得分:0)
SortedList在添加任何元素时对元素进行排序。因此,如果您编写这样的比较函数,您将按排名或名称对最后一个元素进行排序。因此整体排序对你没有任何意义。
没有方法可以再次排序"在SortedList中。您更改数据适配器以进行动态排序。
recyclerView.swapAdapter(newAdapter, false);`
如果你的适配器中有稳定的id,你会得到一个很好的动画。因为swapAdapter()帮助RecyclerView重用视图持有者。