CursorAdapter и FLAG_REGISTER_CONTENT_OBSERVER

В моем действии ListView использование LoaderManager для управления курсором, а также наличие пользовательского CursorAdapter

mAdapter = new CustomCursorAdapter(getActivity(), null,CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
setListAdapter(mAdapter);

При регистрации адаптера передается нулевой курсор, которым управляет LoaderManager.

getLoaderManager().initLoader(3, null, this);

Теперь нужно реализовать SectionIndexer для этого CustomCursorAdapter. Моя проблема в том, что в конструкторе CustomCursorAdapter курсор изначально будет нулевым, как я узнаю, когда у меня будет готовый курсор.

Eсть

getCursor();

метод, который доступен для получения курсора в CursorAdapter, но в каком методе обратного вызова я точно знаю, что LoaderManager закончил загрузку курсора с данными, готовыми для манипулирования

Благодарность


person Thunderbird    schedule 25.10.2011    source источник


Ответы (2)


В каком методе обратного вызова я точно знаю, что LoaderManager завершил загрузку Cursor данными, готовыми для обработки?

LoaderManager ничего не "загружает"... скорее, он инструктирует Loader запрашивать источник данных (я полагаю, в данном случае ContentProvider). Затем CursorLoader уведомляет LoaderManager о завершении загрузки и создании Cursor. Наконец, LoaderManager вызывает метод обратного вызова onLoadFinished() (который вы, скорее всего, реализовали в Activity) с загруженными данными.

Кроме того, вам не нужно использовать CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER с LoaderManager... Loader регистрирует ContentObserver самостоятельно, поэтому регистрация для CursorAdapter бесполезна и пустая трата времени.

person Alex Lockwood    schedule 03.08.2012

существует метод onContentChanged(), который срабатывает при изменении курсора. Это работает, если вы работаете с поставщиками контента и URI. Надеюсь, это поможет.

person Pablo Johnson    schedule 04.06.2012