如何按字母顺序对自定义列表视图进行排序?

时间:2012-05-21 11:41:51

标签: java android

我有一个带有ImageView和textview的自定义列表视图。我正在通过这种方法检索该列表视图:

private List<Currency> getModel() {
        List<Currency> list = new ArrayList<Currency>();
        for (int i = 0; i < countryCode.length; i++) {

            list.add(get(countryCode[i], flag[i]));
        }


        return list;
    } 

此方法返回特定列表项中的图像列表和textview,我在适配器中设置它以在列表视图中显示它。但是,如何通过按字母顺序与列表中该文本视图的文本进行比较来对此列表进行排序?我试过这个

Collections.sort(list, new Comparator<String>() {
        @Override
        public int compare(String s1, String s2) {
            return s1.compareToIgnoreCase(s2);
        }
    });

但此方法仅适用于字符串类型列表,但我的列表不是字符串类型?怎么办?

3 个答案:

答案 0 :(得分:2)

尝试以这种方式进行比较

Collections.sort(list, new Comparator<Currency>() {
        @Override
        public int compare(Currency c1, Currency c2) {
            return c1.getCurrencyName().compareToIgnoreCase(c2.getCurrencyName());
        }
    })

答案 1 :(得分:1)

Collections.sort(list, new Comparator<Currency>() {
        @Override
        public int compare(Currency s1, Currency s2) {
            return s1.compareTo(s2); 
        }
});

不要忘记实施Comparable<Currency>界面,以便按照您希望的方式实施compareTo(Currency o);

答案 2 :(得分:0)

您的list包含Currency个对象,因此您需要创建一个比较Currency的比较器。现在,我不确定什么类型的Currency类正在使用,但如果它是from the standard JDK,那么它有一个getCurrencyCode()方法返回一个字符串(或者你可以使用countryCode您正在进入get()调用。

然后,您只需创建一个Comparator实例,如下所示:

Collections.sort(list, new Comparator<Currency>() {
    @Override
    public int compare(Currency s1, Currency s2) {
        return s1.getCurrencyCode()
                 .compareToIgnoreCase(s2.getCurrencyCode());
    }
});

请注意,return子句不必进行字符串比较。如果您认为s1“小于”s2,则基本上返回的值小于零,如果您认为“更大”,则返回大于零的值比s2(如果它们相等则返回零)。比较算法取决于你。