0

我在下面有这段代码,以便根据项目的名称对我的 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;

我有一个小问题,我也希望有一个 ActionBar 菜单选项来按难度排序:难度是简单的、中等的和困难的。问题是,如果我使用相同的排序方法,它会按照简单、困难、中等......就像它们在字母表中一样对它们进行排序。任何人都可以帮我设置它,以便将它们与实际难度级别进行比较,从易到难,我将如何指定这个顺序?

提前致谢!所有帮助将不胜感激,因为我不知道。

4

2 回答 2

1

多亏了@Robadob 的帮助,我终于修复了按难度排序的问题。

   case R.id.menu_order_difficulty:
        adapter.sort(new Comparator<Shop>() {
            @Override
            public int compare(Recipe arg0, Recipe arg1) {
                return (difficulty(arg0.getDifficulty())-difficulty(arg1.getDifficulty()));
            }

            private int difficulty(String name)
            {
                if(name.equals("Easy"))
                    return 0;
                else if (name.equals("Medium"))
                    return 1;
                else if(name.equals("Hard"))
                    return 2;
                return 0;
            }
        });
        this.setListAdapter(adapter);
        adapter.notifyDataSetChanged();             
        return true;

我想我会发布我完整的答案,以防将来对任何人有帮助。

于 2013-09-11T12:33:59.173 回答
1

你希望你的比较器是这样的;

new Comparator<Shop>() {
        @Override
        public int compare(Shop arg0, Shop arg1) {
            return nameToInt(arg0.getName())-nameToInt(arg1.getName());
        }
        private static int nameToInt(String name)
        {
            if(name.equals("easy"))
                return 0;
            if(name.equals("medium"))
                return 1;
            if(name.equals("hard"))
                return 2;
            return 3;
        }
    }

在你的对象中使用枚举来识别 easy med hard 可以使这个更干净。

于 2013-09-11T12:09:00.253 回答