2011年10月4日火曜日

Android SimpleCursorAdapter で ViewBinder を使う

SimpleAdapter で ViewBinder を使う方法は Android Layout CookBook に書いたので、SimpleCursorAdapter で ViewBinder を使う方法を紹介します。

SimpleCursorAdapter.ViewBindersetViewValue() メソッドでは第2引数としてその行の Cursor と、第3引数として列の columnIndex が渡されるので、これを使ってそのカラムに表示したいデータを取得して、色を変えたり文字の大きさを変えたり表示するデータを別のテーブルからとってきたりして、対象の View にセットします。

public class SimpleCursorAdapterSampleActivity extends ListActivity { private static final String[] PHONE_PROJECTION = new String[] { Phone._ID, Phone.TYPE, Phone.NUMBER }; private static final int COLUMN_TYPE = 1; private static final int[] COLOR_LIST = new int[] { Color.parseColor("#002A42"), Color.parseColor("#3DC3EA"), Color.parseColor("#99417B"), Color.parseColor("#F2AE30"), Color.parseColor("#F2D338"), }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Cursor c = getContentResolver().query( Phone.CONTENT_URI, PHONE_PROJECTION, // projection null, // selection null, // selectionArgs null // orderBy ); startManagingCursor(c); SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_2, c, new String[] { Phone.TYPE, Phone.NUMBER }, new int[] { android.R.id.text1, android.R.id.text2 }); adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() { public boolean setViewValue(View view, Cursor cursor, int columnIndex) { if (columnIndex == COLUMN_TYPE) { int type = cursor.getInt(COLUMN_TYPE); String text = (String) Phone.getTypeLabel(getResources(), type, null); ((TextView) view).setText(text); ((TextView) view).setTextColor(COLOR_LIST[type % 5]); return true; } return false; } }); setListAdapter(adapter); } }


0 件のコメント:

コメントを投稿