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

にはオブジェクトlistが含まれCurrencyているため、を比較するコンパレータを作成する必要があります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 に答える