PreferenceManager getDefaultSharedPreferences jest przestarzałe w systemie Android Q

Odpowiedzi:

237

Możesz użyć wersji biblioteki obsługującej AndroidX PreferenceManager, tj. androidx.preference.PreferenceManagerI nie android.preference.PreferenceManager.

pamiętaj, aby dodać następujące elementy do pliku build.gradle.

implementation 'androidx.preference:preference:1.1.1'
laalto
źródło
50
Zapomniałeś dodać zależność: implementacja "androidx.preference: preference: 1.1.0"
Abhinav Saxena
1
@AbhinavSaxena Tak, oczywiście. Jest to niejawne w przypadku korzystania z biblioteki wsparcia. Wcześniejsza edycja tej odpowiedzi dodała zależność ktx tylko do kotlin; Wycofałem tę edycję, ponieważ dotyczyła tylko kotlin.
laalto
Wydaje się, że tak implementationnie jest dependency?
Richard Barraclough
To też nie działa: Nie można rozwiązać zależności dla „: app @ debugAndroidTest / compileClasspath”: Nie można znaleźć implementacji ”androidx.preference: preference: 1.1.0.
Richard Barraclough
Jestem ciekawy; dlaczego zrezygnowali z tego interfejsu i czy preferowano inny sposób uzyskiwania wspólnych preferencji, czy też zamierzali przejść na androidx?
Edward Falk
161

Pakiet preferencezawiera androidx PreferenceManager :

Jawa: implementation "androidx.preference:preference:1.1.1"

Kotlin: implementation "androidx.preference:preference-ktx:1.1.1"


tj. zmień android.preference.PreferenceManagernaandroidx.preference.PreferenceManager


Zobacz także PreferenceFragmentCompat , która jest bieżącą PreferenceFragmentklasą do użycia.

Martin Zeitler
źródło
Dodano bezpośredni link do PreferenceFragmentCompat, który wtedy nie istniał ... jest to zwykle następny problem z wycofywaniem, z którym można się spotkać, próbując zaktualizować preferencje. Druga połączona odpowiedź była ważna tylko przez ograniczony czas.
Martin Zeitler
Czy możemy używać interfejsów API przed API 29?
H.Karatsanov
5

Jeśli tylko zapisujesz i pobierasz pary klucz-wartość, możesz zamienić:

 prefs = PreferenceManager.getDefaultSharedPreferences(this); 

z:

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

Upewnij się, że używasz prawidłowej nazwy pliku dla nowej implementacji, w przeciwnym razie użytkownicy utracą dostęp do wszystkiego, co zapisano za pomocą getDefaultSharedPreferences (!). Poniższy kod otrzyma nazwę pliku używaną przez getDefaultSharedPreferences:

getPackageName() + "_preferences"
Androidcoder
źródło
2

Cytat z PreferenceManager dokumentacji :

Ta klasa została wycofana na poziomie interfejsu API 29.
Użyj biblioteki preferencji AndroidX, aby zapewnić spójne zachowanie na wszystkich urządzeniach. Aby uzyskać więcej informacji na temat korzystania z biblioteki preferencji AndroidX, zobacz Ustawienia .

Sergey Glotov
źródło
20
Co nie było spójne w oryginale?
programista Androida
1

Tak, jest przestarzały. Użyj biblioteki preferencji AndroidX, aby zapewnić spójne działanie na wszystkich urządzeniach. Aby uzyskać więcej informacji na temat korzystania z biblioteki preferencji AndroidX, zobacz Ustawienia.

Obserwuj to -

PreferenceManager

Anupam
źródło
0

kotlin libray

implementation 'androidx.preference:preference-ktx:1.1.1'

kotlin użyj Configuration.getInstance (). load (this, androidx.preference.PreferenceManager.getDefaultSharedPreferences (this))

developerjavad
źródło