У меня есть этот метод, который я использую, чтобы заполнить просмотр списка данными из базы данных sqlite. Работает, как и ожидалось, при запуске приложения:
private void populateListView() {
Cursor showsCursor = mDbHelper.fetchAllSummaries();
startManagingCursor(showsCursor);
// Create an array to specify the fields we want to display in the list
String[] from = new String[]{DbAdapter.SUMMARY_TITLE, DbAdapter.SUMMARY_DATE, DbAdapter.SUMMARY_SUMMARY};
// and an array of the fields we want to bind those fields to
int[] to = new int[]{R.id.showtitle, R.id.showdate, R.id.showsummary};
// Now create a simple cursor adapter and set it to display
SimpleCursorAdapter shows =
new SimpleCursorAdapter(this, R.layout.custom_row_view, showsCursor, from, to);
setListAdapter(shows);
}
Затем у меня также есть пункт меню Обновить, который обновляет базу данных и снова вызывает populateListView (), чтобы заполнить представление списка обновленными данными. Это также кажется , чтобы работать нормально.
Но точно нет! Потому что, если я начну другое действие (например, нажав на один из элементов представления списка), а затем вернусь назад, используя кнопку «Назад», мой список будет пуст. Повторный вызов populateListView () создаст его заново, но он снова будет пустым при возврате из другого действия.
Путем отладки я обнаружил, что если я опускаю startManagingCursor (), он отлично работает.
Так что, очевидно, двойной вызов startManagingCursor () вызовет неожиданные побочные эффекты. Почему это происходит и как я могу решить это?
Это неправильное место для вызова startManagingCursor (), лучше ли это в методе onCreate ()? И должен ли я на самом деле вызвать stopManagingCursor () в одной точке?