2013年1月15日火曜日

Localeをsortする

Localeをsortする

Stringをsortすることは、ArrayAdapterのsort()を使ってみるのとおりです。

今回はArrayAdapterを使ってLocaleをsortします。

toString()メソッドを実装しているObjectであればArrayAdapterで取り扱えます。幸いにして、Locale classはtoString()メソッドを実装しています。

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ListView lv;
        lv = new ListView(this);
        setContentView(lv);
        
        ArrayAdapter<Locale> aa;
        aa = new ArrayAdapter<Locale>(this, R.layout.activity_main, ls);
        aa.sort(new MyComparator());
        lv.setAdapter(aa);
    }
    
    public class MyComparator implements Comparator<Locale>{
        @Override
        public int compare(Locale l1, Locale l2){
            int iRet;
            iRet = l1.getLanguage().compareTo(l2.getLanguage());
            if(iRet==0){
                return l1.getCountry().compareTo(l2.getCountry());
            }
            else return iRet;
        }
    }

    Locale[] ls = {//ランダムに並んでいる
        Locale.CHINA,
        Locale.FRENCH,
        Locale.CANADA,
        Locale.JAPANESE,
        Locale.GERMANY,
        Locale.ENGLISH,
        Locale.CANADA,
        Locale.GERMAN,
        Locale.JAPAN,
        Locale.US,
        Locale.FRANCE,
        Locale.UK
    };
}

R.layout.activity_mainのxmlは次のとおりです。
<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world" 
    >
</TextView>

0 件のコメント:

コメントを投稿