Android: запрос курсора при замене всей базы данных - PullRequest
0 голосов
/ 10 января 2011

У меня есть ListActivity, который использует SimpleCursorAdapter для отображения содержимого базы данных. У меня возникают проблемы при обновлении представления при изменении базовой базы данных.

В качестве эксперимента я добавил вызов Cursor.requery() в onResume() действия для отладки, поэтому все, что мне нужно сделать, это переключиться на другое действие и вернуться назад, и оно должно вызвать обновление. Я также переопределил onContentChanged() для отладки. Оказывается, вызывается requery(), но это не приводит к вызову onContentChanged().

Я подозреваю, что курсор использует устаревшие кэшированные данные. Операция, которая вызывает изменение, фактически включает в себя стирание и замену всей базы данных. Вместо того, чтобы просто запрашивать, я думаю, что мне нужно выбросить курсор и восстановить его с нуля.

Я пытался закрыть и снова открыть базовую базу данных в сочетании с Cursor.requery(), но курсор, похоже, не любит, когда db вытаскивают из-под ног вот так. (Список заканчивается пустым.)

Редактировать: Я также пытался позвонить adapter.notifyDataSetChanged() вместе с requery() в onResume(), но это не имеет значения.

Любой совет?

Ответы [ 2 ]

1 голос
/ 10 января 2011

Решается путем удаления курсора, закрытия и повторного открытия базы данных, а затем повторного создания курсора.Я использую Observer для информирования активности изменения базы данных следующим образом:

@Override 
public void update(Observable observable, Object data) { 
    // database changed 
    runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
            stopManagingCursor(cursor); 
            dbAdapter.close(); 
            dbAdapter.open(); 
            cursor = getAccounts(); 
            startManagingCursor(cursor); 
            adapter.changeCursor(cursor); 
        } 
    }); 
} 
0 голосов
/ 10 января 2011

Вы пытались вызвать notifyDataSetChanged () для вашего SimpleCursorAdapter из метода onResume () вашего ListActivity?

...