PreferenceManager getDefaultSharedPreferences застаріла в Android Q


Відповіді:


212

Ви можете використовувати версію бібліотеки підтримки AndroidX PreferenceManager, тобто androidx.preference.PreferenceManagerі ні android.preference.PreferenceManager.

не забудьте додати наступне у свій build.gradle.

implementation 'androidx.preference:preference:1.1.1'

50
Ви забули додати залежність: реалізація "androidx.preference: preference: 1.1.0"
Абхінав Саксена

1
@AbhinavSaxena Так, звичайно. Це неявно під час використання бібліотеки підтримки. Раніше редагування до цієї відповіді додало залежність ktx лише від kotlin; Я відкотив це редагування, оскільки воно було лише kotlin.
laalto

Це , здається, має бути implementationНЕ dependency?
Річард Барраклоу,

Не те, що це також працює: Неможливо вирішити залежність для ': app @ debugAndroidTest / compileClasspath': Не вдалося знайти реалізацію "androidx.preference: preference: 1.1.0.
Річард Барракло,

Мені цікаво; чому вони припинили цей інтерфейс, і чи був якимсь іншим способом отримання спільних уподобань переважним, чи перехід на androidx за наміром?
Едвард Фальк

154

Пакет preferenceнадає androidx PreferenceManager :

Java: implementation "androidx.preference:preference:1.1.1"

Котлін: implementation "androidx.preference:preference-ktx:1.1.1"


тобто змінити android.preference.PreferenceManagerнаandroidx.preference.PreferenceManager


Також див. PreferenceFragmentCompat , який є поточним PreferenceFragmentкласом для використання.


Додано пряме посилання на PreferenceFragmentCompat, якого тоді ще не було ... зазвичай це наступна проблема застарівання, з якою можна зіткнутися при спробі оновити налаштування. Інша відповідна відповідь була дійсною лише обмежений проміжок часу.
Мартін Цайтлер,

Чи можемо ми використовувати в API перед API 29?
Г.Карацанов

3

Якщо ви просто зберігаєте та отримуєте пари ключ-значення, ви можете замінити їх:

 prefs = PreferenceManager.getDefaultSharedPreferences(this); 

з:

 prefs = getSharedPreferences(
            "my.app.packagename_preferences", Context.MODE_PRIVATE);

Обов’язково використовуйте правильне ім’я файлу для нової реалізації, інакше ваші користувачі втратять доступ до всього збереженого за допомогою getDefaultSharedPreferences (!). Наступне отримає ім’я файлу getDefaultSharedPreferences, яке використовує:

getPackageName() + "_preferences"

2

Цитата з PreferenceManager документації :

Цей клас застарів на рівні API 29.
Використовуйте бібліотеку налаштувань AndroidX для послідовної поведінки на всіх пристроях. Для отримання додаткової інформації про використання бібліотеки налаштувань AndroidX див. Налаштування .


19
Що не відповідало оригінальному?
розробник android

1

Так, це застаріло. Використовуйте бібліотеку налаштувань AndroidX для послідовної поведінки на всіх пристроях. Для отримання додаткової інформації про використання бібліотеки налаштувань AndroidX див. Налаштування.

Слідуйте за цим -

PreferenceManager

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.