下面的代码是我用来按字母顺序排序ListView的方法:
case R.id.menu_order_name:
adapter.sort(new Comparator<Shop>() {
@Override
public int compare(Shop arg0, Shop arg1) {
return arg0.getName().compareTo(arg1.getName());
}
});
this.setListAdapter(adapter);
adapter.notifyDataSetChanged();
return true;
当我按A-Z排序后单击它,虽然当我再次单击ActionBar菜单选项进行排序时,我希望它按Z-A排序。任何人都可以告诉我如何扭转排序的顺序吗?
在此先感谢,所有帮助将不胜感激!
答案 0 :(得分:2)
查看String.compareTo()
的文档:
退货
如果字符串相等则为0;如果此字符串在指定字符串之前,则为负整数;如果此字符串在指定字符串之后,则为正整数。
换句话说:简短的回答是反转Comparator
当前返回的值。最快的方法是简单地乘以-1
,因为:
-1 * -1 = 1
0 * -1 = 0
1 * -1 = -1
这将有效地逆转原始Comparator
的排序顺序。在代码中:
adapter.sort(new Comparator<Shop>() {
@Override public int compare(Shop arg0, Shop arg1) {
return -arg0.getName().compareTo(arg1.getName());
}
});
但是,由于这是一个非常常见的用例,我们可以通过利用Java提供的功能来更轻松地完成它。可以说原始Comparator
由aToZComparator
表示;我们可以使用Collections
实用程序来反转它:
adapter.sort(Collections.reverseOrder(aToZComparator);
这基本上应用了反转比较结果的相同概念,并有效地将aToZComparator
更改为zToAComparator
。
我会自行决定何时选择Comparator
的逻辑。