Я только что заметил тот факт, что этот метод addPreferencesFromResource(int preferencesResId)
помечен как устаревший в документации Android ( Справочная запись ).
К сожалению, в описании метода нет альтернативного метода.
Какой метод следует использовать вместо этого для подключения preferenceScreen.xml к соответствующей PreferenceActivity?
addPreferencesFromResource(int preferencesResId)
. Я что-то пропустил ?Ответы:
В описании метода нет альтернативного метода, поскольку предпочтительный подход (на уровне API 11) заключается в создании экземпляров объектов PreferenceFragment для загрузки ваших предпочтений из файла ресурсов. Смотрите пример кода здесь: PreferenceActivity
источник
Чтобы добавить больше информации к правильному ответу выше, после прочтения примера из Android- я обнаружил, что вы можете легко преобразовать ваши действия с предпочтениями в фрагмент предпочтений. Если у вас есть следующие действия:
Единственные изменения, которые вам нужно сделать, - это создать внутренний класс фрагмента, переместить его
addPreferencesFromResources()
во фрагмент и вызвать фрагмент из действия, например, так:Там могут быть другие тонкости, чтобы сделать более сложные предпочтения из фрагментов; если так, я надеюсь, что кто-то заметит их здесь.
источник
addPreferencesFromResources()
в торговле для PreferenceFragment? Это выглядит ненужным с точки зрения новичка.@ Гаррет Уилсон Спасибо большое! Как нуб к кодированию Android, я застрял с проблемой несовместимости предпочтений в течение многих часов, и я нахожу это настолько разочаровывающим, что они осудили использование некоторых методов / подходов для новых, которые не поддерживаются более старыми API, таким образом приходится прибегать к разного рода обходным путям, чтобы приложение работало на самых разных устройствах. Это действительно расстраивает!
Ваш класс великолепен, поскольку он позволяет вам продолжать работать в новых API с предпочтениями, какими они были раньше, но он не имеет обратной совместимости. Поскольку я пытаюсь охватить широкий спектр устройств, я немного поработал над ним, чтобы он работал как на устройствах до API 11, так и в более новых API:
Испытано в двух эмуляторах (2.2 и 4.2) с успехом.
Почему мой код выглядит таким дерьмовым:
Я нуб к кодированию Android, и я не лучший поклонник Java.
Чтобы избежать устаревшего предупреждения и заставить Eclipse позволить мне компилировать, мне пришлось прибегнуть к аннотациям, но, похоже, они затрагивают только классы или методы, поэтому мне пришлось перенести код на два новых метода, чтобы воспользоваться этим.
Мне бы не хотелось писать мой идентификатор ресурса xml дважды каждый раз, когда я копирую и вставляю класс для новой PreferenceActivity, поэтому я создал новую переменную для хранения этого значения.
Я надеюсь, что это будет полезно для кого-то еще.
PS: Извините за мои убежденные взгляды, но когда вы приходите в себя и обнаруживаете такие недостатки, вы ничего не можете с этим поделать, кроме как расстроиться!
источник
Мой подход очень близок к подходу Гаррета Уилсона (спасибо, я проголосовал за тебя;)
Кроме того, он обеспечивает совместимость с Android <3.
Я только что осознал, что мое решение еще ближе к решению Кевина Ремо . Это просто немного чище (так как он не полагается на «образец» антипаттерна ).
Для «реального» (но более сложного) примера см. NusicPreferencesActivity и NusicPreferencesFragment .
источник
@SuppressLint("NewApi")
- избегай - будь точнее. Вы использовали его для низкого API? Это броситVerifyError
@SuppressLint("NewApi")
просто плохой стиль@SuppressLint("NewApi")
в этой конкретной ситуации?@TargetApi(Build.VERSION_CODES.HONEYCOMB)
- не все предупреждения для любого API :)Вместо исключений просто используйте:
и использовать
подавить предупреждения.
источник
Вместо того, чтобы использовать
PreferenceActivity
для прямой загрузки предпочтений, используйтеAppCompatActivity
или эквивалентный, который загружаетPreferenceFragmentCompat
который загружает ваши предпочтения. Он является частью библиотеки поддержки (теперь Android Jetpack) и обеспечивает совместимость с API 14.В вашем
build.gradle
, добавьте зависимость для библиотеки поддержки предпочтений:Примечание. Предполагается, что XML-файл настроек уже создан.
Для вашей деятельности создайте новый класс деятельности. Если вы используете материальные темы, вы должны расширить
AppCompatActivity
, но вы можете быть гибкими с этим:Теперь важная часть: создайте фрагмент, который загружает ваши предпочтения из XML:
Для получения дополнительной информации ознакомьтесь с документами для разработчиков Android
PreferenceFragmentCompat
.источник