У меня есть Listview, который выглядит следующим образом:
флажок: textview {0 .. n}
У меня есть OnCheckChangedListener, который прослушивает изменения флажка (флажок имеет фокусируемое значение false, как рекомендовано http://www.mousetech.com/blog/?p=74).
Нужное мне поведение заключается в том, что пользователи могут установить флажок, чтобы установить его состояние, и могут щелкнуть элемент списка, чтобы получить описание.
В настоящее время состояние флажка сохраняется правильно, и если вы щелкнете по элементу, то отобразится описание. Однако если вы сначала измените состояние, а затем нажмете, чтобы получить описание, флажок вернется к предыдущему состоянию. Фактически все флажки возвращаются к предыдущему состоянию.
Кто-нибудь знает, как я могу заставить это работать?
Спасибо.
***** EDIT ********
SimpleCursorAdapter adapter =
new SimpleCursorAdapter(this,
R.layout.listview_item,
cursor,
new String[] {MyContentColumns.NAME, MyContentColumns.MyBoolean },
new int[] {R.id.listview_item_title,R.id.listview_item_myBoolean });
adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
@Override
public boolean setViewValue(View view, Cursor cursor,int columnIndex) {
String c_name = cursor.getColumnName(columnIndex);
if (c_name.equals(MyContentColumns.NAME)) {
// set up name and description of listview
MyContent v = mycontent.getMyContent(cursor.getString(columnIndex));
if (view instanceof TextView) {
TextView tv = (TextView) view;
if (tv.getId() == R.id.listview_item_title) {
tv.setText(v.getLongName());
}
}
return true;
} else if (c_name.equals(MyContentColumns.MyBoolean)) {
// if myBoolean == 0, box is checked
// if myBoolean == 1, box is unchecked
int myBoolean = cursor.getInt((cursor.getColumnIndex(MyContentColumns.MyBoolean)));
final String myCont_name = cursor.getString(cursor.getColumnIndex(MyContentColumns.NAME));
final String myCont_cid = cursor.getString(cursor.getColumnIndex(MyContentColumns.CONTENT_ID));
final long c_id = cursor.getLong(cursor.getColumnIndex(MyContentColumns._ID));
if (view instanceof CheckBox) {
((CheckBox) view).setChecked(myBoolean == 1);
((CheckBox) view)
.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
ContentValues values = new ContentValues();
values.put(MyContentColumns.MyBoolean,isChecked ? 1 : 0);
int rows = getContentResolver()
.update(
ContentUris.withAppendedId(Uri.withAppendedPath(MyContentColumns.CONTENT_URI,"mycontent"),c_id),
values,
null,
null);
if ( rows == 0) {
Logger.wLog(String
.format("Couldn't update values for %s into db for content %d",
myCont_name, myCont_cid));
}
}
});
}
return true;
}
return false;
}
});
Так что, похоже, что нажатие на один элемент списка приводит к тому, что другие элементы списка также щелкаются ... поэтому значения возвращаются, и мои состояния становятся противоречивыми ... идеи? спасибо.