Использование Android CursorLoaders и других функций Honeycomb в приложении для телефона (Froyo) - PullRequest
2 голосов
/ 11 июля 2011

Я работаю над приложением для телефона, используя Froyo (моя версия телефона).Я бы хотел включить Honeycomb в проект.

Я импортировал пакет совместимости Android в свой проект.Мое текущее приложение читает из базы данных SQLite.Загружает галерею и различные GridViews и ListViews из указанной базы данных.Я не знаю, что делать дальше.Должен ли я переключить действия на FragmentActivities?Как перейти от моих текущих курсоров к CursorLoaders?Как это влияет на пользовательские адаптеры для загрузки галереи и сетки / списка?И т.д ...

Буду признателен за любую помощь и совет, который вы можете дать.Мне трудно понять, как конвертировать то, что у меня есть, и позволить обоим сосуществовать.Я действительно хочу сделать это «правильным образом».

РЕДАКТИРОВАТЬ : я понимаю, что это довольно широкий «вопрос».Итак, давайте сконцентрируемся на вещи Cursor to CursorLoader.Я создам новые вопросы для других предметов.

Ответы [ 2 ]

5 голосов
/ 11 июля 2011

С библиотекой совместимости я использовал CursorLoader и фрагменты, нацеленные на 2.1.

Загрузчики довольно просты, если у вас есть ContentProvider, поддерживающий их, фрагменты требуют использования FragmentActivity (возможно, и LoaderCursors тоже).1004 * Однако загрузчикам необходим интерфейс LoaderManager.LoaderCallbacks.

У загрузчиков есть жизненный цикл, у меня нет кода под рукой, но он такой.

LoaderManager.InitLoader(USER_SPECIFIED_ID_OF_LOADER);

---- Который в конечном итоге вызывает --->

Loader<Cursor> onCreateLoader(int id, Bundle args) {
      return new CursorLoader(getActivity(), baseUri,
             CONTACTS_SUMMARY_PROJECTION, select, null,
            Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");
}

Именно здесь ваш Loader выполняет загрузчик, я использовал только CursorLoader в своем коде, поэтому я не знаю больше о мельчайших деталях.

Когда загрузчик завершает работу, вызывается последний обратный вызов.

public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
    //Do whatever you want with your cursor here.
}

При этом они работают довольно хорошо и выполняют свою работу, как и ожидалось, двумя большими пальцами вверх.

* Редактировать:Существует также onLoaderRestarted (), который, вероятно, вызывается при перезапуске загрузчика, не совсем точно, когда он вызывается.

0 голосов
/ 11 июля 2011

Хотите, чтобы ваше приложение работало на Froyo и Honeycomb? Или переключиться только на соты?

Если вы заинтересованы только в работе на устройствах Honeycomb, вам просто нужно заменить все ваши устаревшие вызовы методов (Activity.managedQuery()) на их замены Honeycomb (CursorLoader).

Если вы хотите запустить на обеих версиях Android (или более ранних), то вы можете использовать отражение. В основном рефлексия проверяет, доступен ли конкретный метод или класс (например, CursorLoader) в текущей системе, и позволяет вам решить, что делать в каждом случае. Вот учебник относительно отражения: http://mobile.tutsplus.com/tutorials/android/java-reflection/

ИЛИ, вы можете просто использовать устаревшие методы как обычно, и они должны правильно работать в Honeycomb. Проверьте здесь для получения дополнительной информации о максимизации совместимости приложения с Honeycomb, в том числе о том, что приложение занимает весь экран, и о разрешении использования панели действий.

...