android:choiceMode="multipleChoice"のListViewがあります。このListViewは、カーソルからSimpleCursorAdapterを介して入力します。ListViewのCheckedTextViewレイアウトの「CheckBox」をカーソルからのブール値に直接バインドする方法は本当にありませんか?
現在、値がtrueの場合、ListView.setItemChecked()を呼び出してカーソルをループします。
private void showMyData(long myId) {
// fill the list
String[] fromColumns = { "myTextColumn" };
int[] toViews = { android.R.id.text1 };
Cursor myCursor = _myData.readData(myId);
CursorAdapter myAdapter = new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_multiple_choice,
myCursor, fromColumns, toViews);
ListView myListView = (ListView) findViewById(R.id.myListView);
myListView.setAdapter(myAdapter);
// mark items that include the object specified by myId
int myBooleanColumnPosition = myCursor
.getColumnIndex("myBooleanColumn");
for (int i = 0; i < myCursor.getCount(); i++) {
myCursor.moveToPosition(i);
if (myCursor.getInt(myBooleanColumnPosition ) == 1) {
myListView.setItemChecked(i, true);
}
}
}
それが仕事をします。しかし、私はこのようなコードが欲しいです:
String[] fromColumns = { "myTextColumn", "myBooleanColumn" };
int[] toViews = { android.R.id.text1, android.R.id.Xyz };
ループはありません。ここで何かが足りないのですか、それともAndroidですか?
編集: Luksprogによって提案されたように私はこれを試しました:
public boolean setViewValue(View view, Cursor cursor,
int columnIndex) {
CheckedTextView ctv = (CheckedTextView) view;
ctv.setText(cursor.getString(cursor
.getColumnIndex("myTextColumn")));
if (cursor.getInt(cursor.getColumnIndex("myBooleanColumn")) == 1) {
ctv.setChecked(true);
Log.d("MY_TAG", "CheckBox checked");
}
return true;
}
チェックボックスのチェックをログに記録しましたが、実際には実行しませんでした。多分それは私の側のバグです。そして、それは最初のループよりもさらに複雑ですが、少なくともフレームワークを使用していて、それに対して機能していないように感じます。だから、答えてくれたLuksprogに感謝します。
しかし、要約すると、Androidには実際には単純なアプローチが欠けています。