手動で追加した値をSimpleCursorAdapterで使う
デバッグとかのときとか、DB使いたくないとき用に。
ArrayAdapterを継承して新しいクラス作ってgetViewオーバーライドして値追加して…ってやるのはめんどくさい。
そこで、SimpleCursorAdapterの引数に使う、DBのクエリ結果を格納するCursorを擬似的に作成する。
二次元表のCursorとして使えるクラスMatrixCursorを使う。
もともとのコードは1つ前の記事。
public class MyListActivity extends ListActivity implements SimpleCursorAdapter.ViewBinder { /** 仮想的に作成するDBのカラム名 */ private static final String FROM = { "_id", "checked", "name" }; private static final int ID = 0; private static final int CHECK = 1; private static final int NAME = 2; /** AdapterでバインドするViewのID */ private static final int TO = { R.id.text_number, R.id.check, R.id.text_name }; /** ListViewにDBの値をバインドするクラス */ private SimpleCursorAdapter adapter; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // DBを仮想的に作成して値を追加していく。FROM配列の長さ=addRowする配列の長さ。 MatrixCursor c = new MatrixCursor(FROM); c.addRow(new String { "1", "0", "Cupcake" }); c.addRow(new String { "2", "1", "Donut" }); c.addRow(new String { "3", "1", "Eclair" }); c.addRow(new String { "4", "1", "Froyo" }); c.addRow(new String { "5", "0", "Gingerbread" }); c.addRow(new String { "6", "0", "Honeycomb" }); adapter = new SimpleCursorAdapter(getApplicationContext(), R.layout.list_row, c, FROM, TO); adapter.setViewBinder(this); setListAdapter(adapter); } public boolean setViewValue(View view, Cursor cursor, int columnIndex) { switch (columnIndex) { case CHECK: CheckBox cb = (CheckBox) view; cb.setChecked(cursor.getInt(columnIndex) == 1); return true; case ID: TextView number = (TextView) view; number.setText("No." + cursor.getString(columnIndex)); return true; case NAME: break; default: break; } return false; } }