При двойном вызове startManagingCursor мои данные исчезают - PullRequest
0 голосов
/ 06 июля 2011

У меня есть этот метод, который я использую, чтобы заполнить просмотр списка данными из базы данных 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 () в одной точке?

1 Ответ

1 голос
/ 06 июля 2011

Неправильно ли вызывать startManagingCursor (), лучше ли использовать метод onCreate ()?

Это должно быть хорошо.

И должен ли я на самом деле вызывать stopManagingCursor () в какой-то момент?

Когда вам больше не нужно управлять Cursor (например, вы его заменяете), позвоните stopManagingCursor().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...