0

ListView3 つの(3) が取り込まれた がありますArrayList

itemsratingsおよびcomments

ただし、先頭の「the」を無視してアイテムを並べ替える必要があります。items ArrayListを使用して を再配置することで既にこれを達成していますCollections.sort(以下のコードを参照) ListView

たとえば、リストが次の場合:

  1. カーズ 3 4
  2. 人 5 3
  3. 動物たち 7 4

ソート後items、私は得ています:

  1. 動物たち 3 4
  2. 車 5 3
  3. 人 7 4

だから、items私が望むように並んでいますが、関連するcommentsratings はソートされていません。それを実現する方法と、どこに配置するかはわかりません。私はArrayAdapterで思う?

itemsリストを変更するために私が行うコードは次のとおりです。

        Comparator<String> ignoreLeadingThe = new Comparator<String>() {
            public int compare(String a, String b) {
                a = a.replaceAll("(?i)^the\\s+", "");
                b = b.replaceAll("(?i)^the\\s+", "");
                return a.compareToIgnoreCase(b);
            }
        };

        Collections.sort(items, ignoreLeadingThe);

ここに質問がありますか?アイテム リストの位置に基づいて評価とコメントのリストを並べ替えるには、どこでどのようにすればよいですか?

編集:

これは私のgetViewコードですArrayAdapter

    ItemObject io = getItem(position);
    String name = io.name;
    String total = io.total;
    String rating = io.ratings;
    String comment = io.comments;

    holder.t1.setText(name);
    holder.t2.setText(total);
    holder.t3.setText(comment);
    holder.t4.setText(rating);

注:上記の例では触れなかった 4 番目のArrayList呼び出しがあります。total

4

1 に答える 1

2

次のように、項目を ArrayList にラップするクラスの作成を検討する必要があります。

class MyItem {
    String item;
    int ratings;
    int comments;
}

次に、代わりにこれらのオブジェクトの ArrayList を用意します。

List<MyItem> myList = new ArrayList<MyItem>();

次に、コンパレーターで、実行しているように実行しますが、andのMyItem.item代わりにテストします。このようなもの:ab

Comparator<MyItem> ignoreLeadingThe = new Comparator<MyItem>() {
    public int compare(MyItem a, MyItem b) {
        a.item = a.item.replaceAll("(?i(^the\\s+", "");
        b.item = b.item.replaceAll("(?i(^the\\s+", "");
        return a.item.compareToIgnoreCase(b.item);
    }
};

Collections.sort(myList, ignoreLeadingThe);
于 2012-08-30T19:52:01.660 に答える