【问题标题】:How can I sort my ListView by Z-A alphabetical instead of A-Z?如何按 Z-A 字母而不是 A-Z 对 ListView 进行排序?
【发布时间】:2013-09-11 21:19:37
【问题描述】:

下面的代码是我用来按字母顺序排列 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 排序。谁能告诉我如何颠倒排序的顺序?

提前致谢,我们将不胜感激!

【问题讨论】:

  • 你可以尝试返回 -arg0.getName().compareTo(arg1.getName());
  • 效果很好,非常感谢你的朋友。你是救生员!我会将我完整的答案发布给任何感兴趣的人。

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


【解决方案1】:

看看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 的逻辑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-25
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-26
    • 2013-11-22
    • 2020-03-07
    相关资源
    最近更新 更多