Android SimpleCursorAdapter не обновляет, когда база данных изменяется

У меня есть Android ListActivity это поддерживается базой данных Cursor через a SimpleCursorAdapter.

Когда объекты нажаты, поле признака в соответствующей строке в базе данных переключается, и представление в списке должно быть обновлено.

Проблема, когда представление, это обновляется, уходит экран и переработано, старое значение отображено на представлении, когда это возвращается в представление. То же самое происходит каждый раз, когда список thr является redrawb (изменения ориентации, и т.д.).

Я использую notifydatasetchanged() для обновления адаптера курсора, но это кажется неэффективным.

Как я должен обновлять базу данных, таким образом, курсор обновляется также?

43
задан Ragunath Jawahar 17 December 2013 в 15:33
поделиться

1 ответ

Вызов requery() на Cursor при изменении данных в базе данных, которые вы хотите отразить в этом Cursor (или то, что Cursor заполняет, как ListView через CursorAdapter).

A Курсор подобен курсору на стороне клиента ODBC -- он содержит все данные, представленные результатом запроса. Следовательно, только потому, что вы изменяете данные в базе данных, курсор Cursor не будет знать об этих изменениях, если вы не обновите его с помощью функции requery().


ОБНОВЛЕНИЕ: Весь этот вопрос и набор ответов должны быть удалены по причине старости, но это, очевидно, невозможно. Тот, кто ищет ответы Android должен иметь в виду, что Android является быстро движущейся мишенью, и ответы с 2009 года, как правило, хуже, чем новые ответы.

Текущее решение заключается в получении свежих Курсор и использовать либо changeCursor() или swapCursor() на CursorAdapter, чтобы повлиять на изменение данных.

90
ответ дан 26 November 2019 в 22:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: