我有一个带有复选框的android.R.layout.simple_list_item_multiple_choice,所以请启动其中的一些。
我怎样才能做到这一点?
我有以下代码:
private void fillList() {
Cursor NotesCursor = mDbHelper.fetchAllNotes();
startManagingCursor(NotesCursor);
String[] from = new String[] { NotesDbAdapter.KEY_TITLE, NotesDbAdapter.KEY_BODY, NotesDbAdapter.KEY_CHECKED };
int[] to = new int[] {
android.R.id.text1,
android.R.id.text2,
//How set checked or not checked?
};
SimpleCursorAdapter notes = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_multiple_choice, NotesCursor,
from, to);
setListAdapter(notes);
}
最佳答案
将行布局中复选框的资源ID放入to
数组中,该数组对应于NotesDbAdapter.KEY_CHECKED
数组中的from
光标。
实现SimpleCursorAdapter.ViewBinder。
让ViewBinder.setViewValue()方法检查何时调用NotesDbAdapter.KEY_CHECKED
列。
如果它不是KEY_CHECKED列,则让它返回false
,适配器将执行其通常的操作。
当它是KEY_CHECKED列时,让它根据需要将CheckBox视图(必需的广播)设置为选中还是不选中,然后返回true
,以使适配器不会尝试自身绑定它。游标和相应的列ID可用于访问查询数据,以确定是否选中此复选框。
通过setViewBinder()在您的SimpleCursorAdapter中设置ViewBinder
这是我的ViewBinder实现之一。它不是用于checboxes,而是用于对文本视图进行一些精美的格式设置,但是应该为您提供一些方法的思路:
private final SimpleCursorAdapter.ViewBinder mViewBinder =
new SimpleCursorAdapter.ViewBinder() {
@Override
public boolean setViewValue(
final View view,
final Cursor cursor,
final int columnIndex) {
final int latitudeColumnIndex =
cursor.getColumnIndexOrThrow(
LocationDbAdapter.KEY_LATITUDE);
final int addressStreet1ColumnIndex =
cursor.getColumnIndexOrThrow(
LocationDbAdapter.KEY_ADDRESS_STREET1);
if (columnIndex == latitudeColumnIndex) {
final String text = formatCoordinates(cursor);
((TextView) view).setText(text);
return true;
} else if (columnIndex == addressStreet1ColumnIndex) {
final String text = formatAddress(cursor);
((TextView) view).setText(text);
return true;
}
return false;
}
};