ExpandableListView, CursorTreeAdapter и управление курсором - PullRequest
2 голосов
/ 03 августа 2011

Попытка использовать ExpandableListView и CursorTreeAdapter. Вот цитата из руководства Android:

защищенный абстрактный Курсор getChildrenCursor (Курсор groupCursor) ... Вы несете ответственность за управление этим курсором в течение жизненного цикла. В некоторых ситуациях адаптер деактивирует Курсор сам по себе, но это не всегда так, поэтому убедитесь, что Курсор правильно управляется.

Хорошо, я нашел в Google несколько примеров и написал следующий код:

@Override
protected Cursor getChildrenCursor( Cursor groupCursor ) {
    int groupID = groupCursor.getInt( groupIDColumn );
    Cursor c = dbAdapter.getHostsCursor( "where expression", groupID );
    startManagingCursor( c );
    return c;
}

Этот код работает, но ExpandableListView запрашивает новый курсор при каждом щелчке по группе, чтобы развернуть его. Новые курсоры создаются и добавляются в список управляемых курсоров Activity.

Но что происходит со старыми курсорами? Где я могу закрыть старый, неиспользуемый курсор, вызвать stopManagingCursor (), если я отвечаю за управление курсорами в соответствии с руководством Google? Если кто-то нажмет, чтобы развернуть и свернуть группы, как быстро приложение упадет из-за переполнения стека или другой утечки системных ресурсов?

Пожалуйста, укажите мне правильное направление.

1 Ответ

0 голосов
/ 03 августа 2011

Рассмотрим эти две альтернативы:


  1. getChildrenCursor() возвращает курсор, который не будет жить долго.

    Пользовательский интерфейс обновляется, а затемкурсор расположен.

  2. У каждой группы есть курсор.

    Нет места для оптимизации.


выбор 1 , вероятно, верно

...