У меня есть Android ListActivity
это поддерживается базой данных Cursor
через a SimpleCursorAdapter
.
Когда объекты нажаты, поле признака в соответствующей строке в базе данных переключается, и представление в списке должно быть обновлено.
Проблема, когда представление, это обновляется, уходит экран и переработано, старое значение отображено на представлении, когда это возвращается в представление. То же самое происходит каждый раз, когда список thr является redrawb (изменения ориентации, и т.д.).
Я использую notifydatasetchanged()
для обновления адаптера курсора, но это кажется неэффективным.
Как я должен обновлять базу данных, таким образом, курсор обновляется также?
Вызов requery()
на Cursor
при изменении данных в базе данных, которые вы хотите отразить в этом Cursor
(или то, что Cursor
заполняет, как ListView
через CursorAdapter
).
A Курсор
подобен курсору на стороне клиента ODBC -- он содержит все данные, представленные результатом запроса. Следовательно, только потому, что вы изменяете данные в базе данных, курсор Cursor
не будет знать об этих изменениях, если вы не обновите его с помощью функции requery()
.
ОБНОВЛЕНИЕ: Весь этот вопрос и набор ответов должны быть удалены по причине старости, но это, очевидно, невозможно. Тот, кто ищет ответы Android должен иметь в виду, что Android является быстро движущейся мишенью, и ответы с 2009 года, как правило, хуже, чем новые ответы.
Текущее решение заключается в получении свежих Курсор
и использовать либо changeCursor()
или swapCursor()
на CursorAdapter
, чтобы повлиять на изменение данных.