sortには下記Collections.sortを使う。
Collections.sort(List<T> list, Comparator<? super T> c)
第二引数はソートをカスタマイズしたいときに独自にコンパレータを実装してやる。なくても良い。コンパレータはcompareメソッドを実装する。
public int compare(Object arg0, Object arg1) {
return 1; //正の整数:arg0が大きい 0:等しい 負の整数:arg0が小さい
}
Listのsortに関してはこれだけ知ってれば十分。と、思う。
サンプルはまた「ListView positionによってViewを変える 」で使用した小説のリストを使用してandroidで行う。著者は外して小説のみとする。
小説を価格でソートするためのクラスを用意。
public class NovelComparator implements Comparator {
private int n;
public NovelComparator() {
n = 1;
}
public NovelComparator(String sort) {
if (sort.equals("desc")) {
n = -1;
} else {
n = 1;
}
}
@Override
public int compare(Object arg0, Object arg1) {
Novel novel0 = (Novel) arg0;
Novel novel1 = (Novel) arg1;
if (novel0.getPrice() > novel1.getPrice()) {
return 1 * n;
} else if (novel0.getPrice() == novel1.getPrice()) {
return 0;
} else {
return -1 * n;
}
}
}
あとはイベント時に下記methodでソートを行い、ListViewにadapterをセットし直すだけ。簡単簡単。
private void sort(String sort) {
Collections.sort(novels, new NovelComparator(sort));
adapter = new NovelAdapter(this, novels);
setListAdapter(adapter);
}