Как лучше использовать адаптеры курсоров и контент-провайдеров в Android 2.2 - PullRequest
1 голос
/ 02 октября 2011

Я в замешательстве, и мне нужна ваша помощь.Я пытаюсь следовать инструкциям, данным Вирджилом Добянским в его лекции « Разработка клиентских приложений REST для Android », данной в Google IO 2010. К сожалению, я не могу найти способ реализовать правильную связь между контент-провайдером и курсоромАдаптер.

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

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

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

Я думал: «Хорошо, я не буду его использовать. Вместо этого я попробую LoaderManager с CursorLoader, как мне советуют».Поэтому я пошел на документацию LoaderManager , чтобы найти пример использования и что я нашел?Прекрасный пример использования конструктора 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 Ответ

1 голос
/ 02 октября 2011

Если вы используете 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

В примере кода в вашем вопросе используется второй, не осуждаемый конструктор, поэтому он должен использовать версию SimpleCursorAdapter.

compat lib.
...