如何按字母顺序而不是A-Z对ListView进行排序?

时间:2013-09-11 21:19:38

标签: android sorting android-listview android-actionbar listadapter

下面的代码是我用来按字母顺序排序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排序。任何人都可以告诉我如何扭转排序的顺序吗?

在此先感谢,所有帮助将不胜感激!

1 个答案:

答案 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提供的功能来更轻松地完成它。可以说原始ComparatoraToZComparator表示;我们可以使用Collections实用程序来反转它:

adapter.sort(Collections.reverseOrder(aToZComparator);

这基本上应用了反转比较结果的相同概念,并有效地将aToZComparator更改为zToAComparator

我会自行决定何时选择Comparator的逻辑。