J'utilise PreferenceActivity pour permettre à l'utilisateur de définir certaines valeurs. Je lui envoie le fichier xml avec les préférences définies.
J'ai mis tout le android:defaultValue=""
pour eux.
Lorsque je lance mon application, j'ai besoin des préférences, ou si elles ne sont pas encore définies manuellement, je veux les valeurs par défaut:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
boolean value = prefs.getBoolean("key"), false);
Cependant, quand android:defaultValue="true"
je reçois encore false
. Ainsi, il semble que les valeurs par défaut définies dans le XML ne soient utilisées nulle part sauf lors de l'initialisation de l'écran des préférences.
Je ne veux pas coder en dur les valeurs par défaut dans la getBoolean()
méthode. Alors, y a-t-il un moyen d'obtenir les valeurs par défaut en ne les définissant qu'à un seul endroit?
la source
onCreate()
deApplication
.readAgain
sur true n'a rien à voir avec l'écrasement des préférences utilisateur. À partir de Javadoc: Remarque: cela ne réinitialisera PAS les préférences à leurs valeurs par défaut.Sachez que si vous utilisez
getSharedPreferences(String sharedPreferencesName, int sharedPreferencesMode)
pour récupérer les préférences, vous devez utiliser pour définir les valeurs par défaut!
PreferenceManager.setDefaultValues(Context context, String sharedPreferencesName, int sharedPreferencesMode, int resId, boolean readAgain)
Par exemple:
PreferenceManager.setDefaultValues(this, PREFS_NAME, Context.MODE_PRIVATE, R.xml.preference, false);
J'espère que cela peut aider quelqu'un.
la source
dans la réponse acceptée de Pixel:
il est indiqué que cela
false
signifie que les valeurs par défaut ne seront pas écrasées. Ce n'est pas ce qu'il fait, c'est juste un indicateur d'efficacité pour arrêter l'analyse si votre application a plus d'un point d'entrée. Malheureusement, le test n'est pas effectué par fichier de préférences, donc si vous avez plus d'un fichier de préférences, vous devez codertrue
sur tous sauf le premier.Si vous êtes préoccupé par l'efficacité, vous pouvez coder quelque chose comme ça.
Si jamais vous ajoutez plus de préférences partagées, définissez simplement SPL sur un nombre élevé.
la source
R.xml.prefs_device
,R.xml.prefs_test
etR.xml.prefs_admin
. Vous pouvez créer un fichier prefs qui contient tous les prefs de ce qui précède:R.xml.prefs_for_loading_default_values
. Ensuite, utilisez-le avecPreferenceManager.setDefaultValues(this, R.xml.prefs_for_loading_default_values, false);
onCreate()
une sous-classe deApplication
(enregistré dans le manifeste), il ne sera de toute façon appelé qu'une seule fois par démarrage d'application. Pour les performances, il serait plus pertinent (voire pas du tout) de ne pas faire l'analyse à chaque fois que l'application démarre (au lieu de cela uniquement au premier démarrage) et c'est ce quefalse
fait. Il s'agit donc plus de savoir si vous avez besoin d'une vérification à chaque démarrage (par exemple quand de nouvelles préférences peuvent être ajoutées) ou si c'est suffisant si cela est fait au premier démarrage (ou réinitialiser les préférences).Par exemple en étendant
DialogPreference
je fais ceci:mDefault peut être:
la source
Assurez-vous également que vous n'avez jamais utilisé les SharedPreferences auparavant. Pour vous assurer qu'ils ne sont pas modifiés (ce qui signifie que setDefaultValues (this, xml, false) n'a aucun effet) désinstallez votre application et téléchargez-la à nouveau pour être sûr qu'aucune valeur n'est touchée. Cela m'a aidé.
la source