1

Я запутался, и мне нужна ваша помощь. Я стараюсь следовать указаниям Вергилия Добжански на его лекции «Developing Android REST Client Applications», приведенной в Google IO 2010. К сожалению, я не могу найти способ реализовать достоверную связь между Content Provider и Cursor Adapter.Что такое способ использования адаптеров курсора и контент-провайдеров в android 2.2

Проблема, с которой я столкнулся, связана с адаптером курсора, поэтому давайте просто предположим, что с поставщиком содержимого все в порядке. Например, попробуем использовать Contacts ContentProvider вместо моего собственного. Я попробовал самое простое решение - любой ContentProvider (как предполагалось, Контакты, предоставленные SDK) и SimpleCursorAdapter. Проблема в том, что конструктор SimpleCursorAdapter, содержащий курсор из «Контакты», устарел. Документация говорит:

Этот конструктор устарел.

Этот параметр не рекомендуется, так как это приводит к тому, что запросы курсора выполняются в потоке пользовательского интерфейса приложения и, следовательно, могут приводить к плохой отзывчивости или даже к ошибкам приложения, не отвечающим. В качестве альтернативы используйте LoaderManager с помощью CursorLoader.

Мои мысли были: «Хорошо, я не буду использовать его. Вместо этого попробую LoaderManager с CursorLoader, поскольку они советуют мне». Итак, я пошел в LoaderManager documentation site, чтобы найти пример использования и что я нашел? Отличный пример использования конструктора SimpleCursorAdapter. Да, тем же, чего я хотел избежать, потому что это усталость.

// Create an empty adapter we will use to display the loaded data. 
    mAdapter = new SimpleCursorAdapter(getActivity(), 
      android.R.layout.simple_list_item_2, null, 
      new String[] { Contacts.DISPLAY_NAME, Contacts.CONTACT_STATUS }, 
      new int[] { android.R.id.text1, android.R.id.text2 }, 0); 
    setListAdapter(mAdapter); 

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

ответ

1

Если вы используете LoaderManager на Android 2.2, у вас уже есть библиотека совместимости с Android в вашем проекте.

В этом случае, не используйте

android.widget.SimpleCursorAdapter 

, потому что класс имеет только один, в настоящее время устаревшего конструктора. Вместо этого используйте:

android.support.v4.widget.SimpleCursorAdapter 

из библиотеки совместимости. Она имеет два конструктора:

SimpleCursorAdapter(Context, int, Cursor, String[], int[]) // deprecated 
SimpleCursorAdapter(Context, int, Cursor, String[], int[], int) // non-deprecated 

код примера в вашем вопросе использует второй, не-конструктор устаревшим и, таким образом, должны быть с помощью Compat Lib версия SimpleCursorAdapter.

+0

И внезапно все путаницы прекратились. Ваш ответ был быстрым и прямым. Большое вам спасибо, сэр;) – Moyshe