web-dev-qa-db-fra.com

Initialiser les préférences à partir de XML dans l'activité principale

Mon problème est que lorsque je démarre l'application et que l'utilisateur n'a pas ouvert mon PreferenceActivity, donc lorsque je les récupère, aucune valeur par défaut n'est définie dans mon fichier preference.xml.

fichier de préférence.xml:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:key="applicationPreference" Android:title="@string/config"
    >
    <ListPreference
            Android:key="pref1"
            Android:defaultValue="default"
            Android:title="Title"
            Android:summary="Summary"
            Android:entries="@array/entry_names"
            Android:entryValues="@array/entry_values"
            Android:dialogTitle="@string/dialog_title"
    />                  
</PreferenceScreen>

Extrait de mon activité principale (méthode onCreate):

    SharedPreferences appPreferences = PreferenceManager.getDefaultSharedPreferences(this);        
    String pref1 = appPreferences.getString("pref1", null);

En conséquence, je me retrouve avec une valeur null.

50
pixel

Dans onCreate() de votre Activity principal, appelez simplement la méthode PreferenceManager.setDefaultValues() .

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

Cela lira votre preference.xml fichier et définissez les valeurs par défaut qui y sont définies. La définition de l'argument readAgain sur false signifie que cela ne définira les valeurs par défaut que si cette méthode n'a jamais été appelée dans le passé, vous n'avez donc pas à vous soucier de remplacer les paramètres de l'utilisateur chaque fois que votre Activity est créé.

107
Dave Webb

Je serai bref. :)

strings.xml (en fait j'ai prefs.xml exclusivement pour les préférences):

<string name="pref_mypref_key">mypref</string>
<string name="pref_mypref_default">blah</string>

preferences.xml:

Android:key="@string/pref_mypref_key"
Android:defaultValue="@string/pref_mypref_default"

MyActivity.Java:

String myprefVal = prefs.getString(getString(R.string.pref_mypref_key), getString(R.string.pref_mypref_default));
14
yanchenko

Votre appel à getString() a null comme deuxième paramètre. Modifiez cela pour être la valeur par défaut que vous souhaitez.

8
CommonsWare