ListView内のアイテムの並び替え

ListViewのアイテムを並び替えるとき、いちいちアイテムリストを1から並び替えるのは労力がかかります。

そこでComparatorというインターフェイスクラスを使います。

このクラスを使えばリストなどの並び替えを最小限のコードで済ませることができます。

では、早速使用例を紹介していきます。

データクラスの例

並び替えで使用するListViewのカスタムデータクラスは次のようになっています。

public class ListData
{
    public String name;
    public int age;
}

名前と年齢を持つ簡単なクラスです。

このデータクラスが並び替えの対象になります。

Comparatorの実装

次に並び替えのためのインターフェイスをComparatorを使って作ります。

ここでは一例として名前を昇順で並び替える機能を持つComparatorを次のようにして作ります。

class NameComparator implements Comparator<ListItem>
{
    @Override
    public int compare(ListData lhs, ListData rhs) 
    {
        return lhs.name.compareTo(rhs.name);
    }
}

compareメソッド内で2つの値の比較を行っています。

リファレンスによるとこのcompareメソッドで負の値を返すと1番目の引数の方が2番目より小さい、0を返すと両方同じ値、正なら1番目の方が2番目より大きいと判断するようです。

Comparatorで並び替え

最後にListView内のアイテムをComparatorで並び替えてみます。

ListView listView = (ListView) findViewById(R.id.listView);
List<ListData> dataArray = new ArrayList<ListData>();

/** データ達をリストに挿入(省略) */

/** カスタムしたArrayAdapterの生成(作り方は省略) */
MyArrayAdapter<ListData> adapter = new MyArrayAdapter<ListData>(
    	        this, R.layout.list_item, dataArray);

/** リスナーなどを設定(省略) */

/** 並び替え */
Collections.sort(dataArray, new NameComparator());
adapter.notifyDataSetChanged();

これで簡単に並び替えができます。

もしComparatorを使わなければ並び替えのために煩雑なソートをしなくてはならなくなります。

無駄なコードを省き、その上コードを分かりやすくできるという意味でComparatorは大変役に立ちます。

皆さんも是非使ってみてください。では、また!

プライバシーポリシー