Я только начал разработку Android и мне это нравится.Чтобы получить некоторый опыт, я пишу небольшую заявку.В моей базе данных есть состояние элемента todo, представленное как int.Я использую флажок в виде списка, чтобы представить это состояние.Чтобы привязать данные к представлению, я использую подкласс SimpleCursorAdapter.Я добавляю onClickListener к флажку, который обновляет состояние в базе данных для используемого элемента списка.Проблема заключается в том, что, если я использую следующий код, список облажается на дисплее (многие элементы будут проверены):
@Override
public View getView(final int pos, View inView, ViewGroup parent) {
View view = inView;
if (view == null) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.toodoolist_item, null);
}
cursor.moveToPosition(pos);
...
checkBox.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
int state = 0;
if (checkBox.isChecked()) {
titleView.setPaintFlags(titleView.getPaintFlags()
| Paint.STRIKE_THRU_TEXT_FLAG);
titleView.setEnabled(false);
state = 1;
} else {
titleView.setPaintFlags(titleView.getPaintFlags()
^ Paint.STRIKE_THRU_TEXT_FLAG);
titleView.setEnabled(true);
}
ContentValues values = new ContentValues();
values.put(TooDooTable.STATE, state);
context.getContentResolver()
.update(ContentUris.withAppendedId(
TooDooTable.CONTENT_URI, id), values, null, null);
cursor.requery();
}
}
Мой текущий способ - использовать инфлятор каждый раз, даже еслиinView не имеет значение null:
@Override
public View getView(final int pos, View inView, ViewGroup parent) {
View view = inView;
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.toodoolist_item, null);
...
Это работает, но я не понимаю, почему я должен сделать это взломать.
Что было бы наилучшей практикой для обновления базы данных в CurserAdapterи получить изменения немедленно отражены в представлении?
Спасибо
Кай