<< Android-Note
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は大変役に立ちます。
皆さんも是非使ってみてください。では、また!
© Kaz