131
votes

PreferenceManager getDefaultSharedPreferences obsolète dans Android Q

PreferenceManager getDefaultSharedPreferences est obsolète dans Android Q , comment le remplacer?


0 commentaires

6 Réponses :


2
votes

Citation de la documentation PreferenceManager :

Cette classe est obsolète au niveau de l'API 29.
Utilisez la bibliothèque de préférences AndroidX pour un comportement cohérent sur tous les appareils. Pour plus d'informations sur l'utilisation de la bibliothèque de préférences AndroidX, voir Paramètres .


1 commentaires

Qu'est-ce qui n'était pas cohérent dans l'original?



1
votes

Oui, il est obsolète. Utilisez la bibliothèque de préférences AndroidX pour un comportement cohérent sur tous les appareils. Pour plus d'informations sur l'utilisation de la bibliothèque de préférences AndroidX, voir Paramètres.

Suivez ceci -

PreferenceManager


0 commentaires

227
votes

Vous pouvez utiliser la version de bibliothèque de support AndroidX de PreferenceManager , c'est-à-dire androidx.preference.PreferenceManager et non android.preference.PreferenceManager .

n'oubliez pas d'ajouter ce qui suit à votre build.gradle.

implementation 'androidx.preference:preference:1.1.1'


8 commentaires

Vous avez oublié d'ajouter la dépendance: implémentation "androidx.preference: préférence: 1.1.0"


@AbhinavSaxena Oui, bien sûr. C'est implicite lors de l'utilisation d'une bibliothèque de support. Une modification antérieure de cette réponse a ajouté la dépendance ktx uniquement kotlin; J'ai annulé cette modification car elle était réservée à Kotlin.


Cela semble devoir être la implementation en implementation non la dependency ?


Non pas que cela fonctionne non plus: Impossible de résoudre la dépendance pour ': app @ debugAndroidTest / compileClasspath': Impossible de trouver l'implémentation "androidx.preference: preference: 1.1.0.


Je suis curieux; Pourquoi ont-ils désapprouvé cette interface et une autre façon d'obtenir des préférences partagées était-elle préférée, ou le passage à androidx était-il l'intention?


@EdwardFalk Je ne sais pas mais pour moi ça sent que getDefaultSharedPreferences() est un dommage collatéral. Oui, de nombreux domaines liés aux préférences ont été fragmentés, il est donc logique de les déplacer vers une bibliothèque de support. getDefaultSharedPreferences() elle-même est toujours la même dans la plate-forme Android et les bibliothèques AndroidX, de sorte que cette fonction n'avait pas vraiment besoin de dépréciation.


Aussi pourquoi aucune mention de cela dans le guide de l'utilisateur des paramètres . La référence PreferenceManager dit obsolète et nous demande de voir comment créer des écrans de préférences.


Où dans le build.grandle j'ajoute cette ligne? Que se passe-t-il avec les anciens téléphones mobiles si je change «Android»? à "androidx."?



159
votes

Lapreference package fournit le PreferenceManager androidx :

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

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


par exemple, changez android.preference.PreferenceManager en androidx.preference.PreferenceManager


Consultez également PreferenceFragmentCompat , qui est la classe PreferenceFragment actuelle à utiliser.


2 commentaires

Ajout d'un lien direct vers PreferenceFragmentCompat , qui n'existait pas à l'époque ... c'est généralement le prochain problème de dépréciation auquel on peut faire face, en essayant de mettre à jour les préférences. L'autre réponse liée n'était valable que pour une durée limitée.


Pouvons-nous utiliser dans les API avant l'API 29?



4
votes

Si vous ne faites que sauvegarder et récupérer des paires clé-valeur, vous pouvez remplacer:

getPackageName() + "_preferences"

avec:

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

Assurez-vous d'utiliser le bon nom de fichier pour la nouvelle implémentation, sinon vos utilisateurs perdront l'accès à tout ce qui est enregistré avec getDefaultSharedPreferences (!). Ce qui suit obtiendra le nom de fichier utilisé par getDefaultSharedPreferences:

 prefs = PreferenceManager.getDefaultSharedPreferences(this); 


0 commentaires

0
votes

bibliothèque kotlin

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

kotlin utilise Configuration.getInstance (). load (this, androidx.preference.PreferenceManager.getDefaultSharedPreferences (this))


0 commentaires