Подтвердить что ты не робот

Android: CursorLoader, LoaderManager, SQLite

Попытка обновить мое старое приложение, в котором некоторые методы устарели. Я узнал, что если я хочу работать с ListView, который показывает данные из db, я должен использовать LoaderManager + CursorLoader. CursorLoader работает с контент-провайдерами. Итак, для каждой таблицы в моем db я должен создать контент-провайдера сейчас? Почему я должен? Насколько я знаю, контент-провайдеры используются для обмена некоторой информацией с другими приложениями, но мое приложение не предоставляет никакой информации. Могу ли я использовать CursorLoader без поставщиков контента?

4b9b3361

Ответ 1

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

Как упоминал Барак, можно реализовать CursorLoader без поставщиков контента, расширив класс AsyncTaskLoader<Cursor>. Тем не менее, большинство учебников и пример кода используют ContentProvider s, и похоже, что команда Android поощряет ее использование. Это также намного сложнее, чем реализация собственного класса.

Тем не менее, если вы действительно не хотите использовать контент-провайдеров, Dianne Hackborn (один из разработчиков фреймворка Android, также известный как "hackbod" здесь, на SO) предлагает написать собственный загрузчик, который вместо этого использует ваш класс базы данных поставщика контента. Самый простой способ - просто взять источник класса CursorLoader из библиотеки совместимости и заменить запросы поставщика запросами на свой собственный класс-помощник db.

Ответ 2

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

Просто просмотрите образцы из файла android sdk для LoaderCustomSupport.java в образцах и демонстрационных файлах совместимости.