126 votes

Préférences Android: Comment charger les valeurs par défaut lorsque l'utilisateur n'a pas utilisé l'écran des préférences?

Je suis à l'aide d'un PreferenceActivity pour permettre à l'utilisateur de définir certaines valeurs. Je suis de nourrir le fichier xml à la définition de préférences.

J'ai mis toutes les android:defaultValue="" pour eux.

Lorsque je démarre mon application, j'ai besoin de vos préférences, ou si elles ne sont pas encore manuellement, je veux les valeurs par défaut:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
boolean value = prefs.getBoolean("key"), false); 

Toutefois, lorsque android:defaultValue="true" je reçois toujours false. Ainsi, il ressemble à la defaultValues défini dans le fichier XML ne sont pas utilisées n'importe où, mais lors de l'initialisation des préférences de l'écran.

Je ne veux pas coder en dur les valeurs par défaut dans l' getBoolean() méthode. Donc, il est un moyen d'obtenir la valeur par défaut valeurs avec seulement de la définition de ces dans 1 endroit?

182voto

pixel Points 4391

cette question est similaire à la mienne:

initialiser-préférences-du-xml-en-main-de l'activité

Suffit d'utiliser ce code en onCreate méthode:

PreferenceManager.setDefaultValues(this, R.xml.preference, false);

Il vous permettra de charger vos préférences à partir de XML, et le dernier paramètre (readAgain) permet de garantir que les préférences de l'utilisateur ne seront pas remplacées.

Jetez un oeil dans PreferenceManager.setDefaultValues dans l'API Android pour complément d'enquête.

27voto

Francesco Vadicamo Points 2867

Sachez que si vous êtes en utilisant
getSharedPreferences(String sharedPreferencesName, int sharedPreferencesMode)

pour récupérer les préférences que vous avez à utiliser
PreferenceManager.setDefaultValues(Context context, String sharedPreferencesName, int sharedPreferencesMode, int resId, boolean readAgain)
pour définir les valeurs par défaut!

Par exemple:
PreferenceManager.setDefaultValues(this, PREFS_NAME, Context.MODE_PRIVATE, R.xml.preference, false);

J'espère que cela peut aider quelqu'un.

13voto

Steve Waring Points 209

dans Pixel accepté de répondre:

PreferenceManager.setDefaultValues(this, R.xml.preference, false);

il est précisé que l' false signifie que les valeurs par défaut ne seront pas remplacées. Ce n'est pas ce qu'il fait, c'est juste une efficacité drapeau d'arrêter le traitement si votre application a plus qu'un seul point d'entrée. Malheureusement, le test n'est pas fait par le fichier de préférences, donc si vous avez plus d'un fichier de préférences, vous devez le code true sur le premier.

Si vous êtes inquiet au sujet de l'efficacité, vous pouvez coder quelque chose comme ça.

final static private int SPL = 1;
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
if (sp.getInt("spl", 0) != SPL)
{
    PreferenceManager.setDefaultValues(this, R.xml.prefs1, true);
    PreferenceManager.setDefaultValues(this, R.xml.prefs2, true);
    sp.edit().putInt("spl", SPL).apply();
}

Si vous ajoutez plus partagé préférences, il suffit de définir SPL pour une hauteur de nombre.

2voto

Macarse Points 36519

Par exemple, étendre DialogPreference je fais ceci:

 @Override
protected void onSetInitialValue(boolean restore, Object defaultValue) {
    super.onSetInitialValue(restore, defaultValue);

    if (restore) {
        mValue = shouldPersist() ? getPersistedString(mDefault) : mDefault;
    } else {
        mValue = mDefault;
    }
}
 

mDefault peut être:

  • mContext.getResources (). getString (attrs.getAttributeResourceValue (androidns, "defaultValue", 100));
  • quelque chose que vous avez répertorié dans R.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X