如何通过难度对ListAdapter进行排序 - 简单,中等,然后很难?

时间:2013-09-11 12:03:51

标签: android sorting android-listview menuitem 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;

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

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

2 个答案:

答案 0 :(得分: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;
        }
    }

在您的对象中使用枚举来识别简单易用的内容可以使其更加清洁。

答案 1 :(得分: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;

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