1

我有一个带有 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;
    } 

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

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

但是这种方法只适用于字符串类型列表,但我的列表不是字符串类型?该怎么办?

4

3 回答 3

2

尝试以这种方式进行比较

Collections.sort(list, new Comparator<Currency>() {
        @Override
        public int compare(Currency c1, Currency c2) {
            return c1.getCurrencyName().compareToIgnoreCase(c2.getCurrencyName());
        }
    })
于 2012-05-21T11:46:12.330 回答
1
Collections.sort(list, new Comparator<Currency>() {
        @Override
        public int compare(Currency s1, Currency s2) {
            return s1.compareTo(s2); 
        }
});

不要忘记实现 Comparable<Currency>接口以实现compareTo(Currency o);您想要的方式。

于 2012-05-21T11:46:26.230 回答
0

您的listcontainsCurrency对象,因此您需要创建一个比较器来比较Currency. 现在,我不确定Currency正在使用哪种类,但如果它是来自标准 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(或者如果它们相等则返回零) . 比较算法由您决定。

于 2012-05-21T11:57:09.770 回答