SimpleCursorAdapterで表示させているListViewのWidgetにListenerをセットする

  1. SimpleCursorAdapterを継承したクラスを作成する
  2. newViewメソッドをオーバーライドする
  3. 引数のView変数(たぶんリスト行のレイアウトが入ってる)からwidgetを生成する
  4. widgetにListenerをセットする
public class MyCursorAdapter extends SimpleCursorAdapter {

	private CheckBox checkBox;

	public MyCursorAdapter(Context context, int layout, Cursor c, String from, int to) {
		super(context, layout, c, from, to);
	}

	@Override
	public View newView(Context context, Cursor cursor, ViewGroup parent) {
		View view = super.newView(context, cursor, parent);
		checkBox = (CheckBox) view.findViewById(R.id.list_row_button);
		checkBox.setOnClickListener(new onCheckBoxClickListener());
		return view;
	}

	public class onCheckBoxClickListener implements OnClickListener {
		public void onClick(View v) {
			Log.e("MyCursorAdapter", String.valueOf(checkBox.isChecked()));
		}
	}

	public class MyViewBinder implements SimpleCursorAdapter.ViewBinder {
		public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
			if (columnIndex == cursor.getColumnIndex("check")) {
				boolean check = (cursor.getInt(columnIndex) == 1);
				checkBox.setChecked(check);
				return true;
			}
			return false;
		}
	}
}

ViewBinderには、DBから取得した値を単純にTextViewにそのまま書き込むだけなら不要。

DBから取った値を加工してTextViewにBindしたり、上のコードみたいにCheckBoxなどBindする場合は、このメソッドを実装して、どのcolumnのときにどのViewにBindするかを書く。

あとはListActivityでsetAdapterすればいい。