2010-05-04 4 views
23

Comment obtenez-vous la valeur par défaut d'une préférence Android définie en XML? Je ne veux pas répéter la définition de la valeur par défaut dans le code et les préférences XML.Valeur par défaut de la préférence Android

+1

publier votre fichier de préférences xml, voulez-vous un PREFERENCE – Jorgesys

Répondre

61

Vous pouvez définir la valeur par défaut dans les ressources (/values/bool.xml):

<resources> 
    <bool name="mypreference_default">true</bool> 
</resources> 

Utilisez la valeur dans le preferences.xml:

<CheckBoxPreference 
    android:defaultValue="@bool/mypreference_default" 
    android:key="mypreference" 
    android:title="@string/mypreference_title" /> 

Ensuite, utilisez dans le code:

SharedPreferences p = PreferenceManager.getDefaultSharedPreferences(context); 
Boolean value = context.getResources().getBoolean(R.bool.mypreference_default); 
Boolean b = p.getBoolean("mypreference", value); 
+0

Belle façon de le faire. Merci d'avoir partagé! – pilcrowpipe

+5

C'est exactement ce que je cherchais, merci. Un conseil supplémentaire: Définissez les ressources qui ne sont pas dans strings.xml mais dans un fichier séparé (par exemple, constants.xml) pour éviter la localisation. – schnatterer

+6

@schnatterer: déplacer les chaînes dans un fichier différent n'empêche pas la localisation. Le nom de fichier 'strings.xml' est juste une convention. Toute ressource peut être localisée en la plaçant dans le sous-dossier 'res /' correct. Bien que placer les paramètres par défaut dans un fichier de ressources distinct est probablement une bonne idée. –

11

Vous devez d'abord définir les valeurs par défaut dans votre fichier XML de préférence. Ensuite, vous pouvez remplir les préférences avec des valeurs par défaut dans votre activité principale en appelant:

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

Lorsque vous avez besoin de récupérer une certaine préférence il suffit d'appeler:

int value = prefs.getInt("key", null); 

Étant donné que vos préférences sont peuplées vous ne serez pas obtenir la valeur null.

+2

Cela ne protège pas encore contre la situation possible où quelqu'un la ligne supprime une préférence de la XML et oublie de mettre à jour le code Java le demandant. Dans cette situation, l'application sera toujours compiler, mais vous obtiendrez une exception NullPointerException. – idolize

+0

Oui, c'est vrai, mais un test fonctionnel doit être écrit pour tester si toutes les préférences nécessaires sont extraites de XML. – pixel

+1

cela n'a pas fonctionné du tout pour moi. les valeurs par défaut n'ont pas été définies après l'appel de cette méthode. – moonlightcheese

1

Créer integer.xml sous res/values pour stocker des constantes entières.

En prefereces.xml référence "@integer/default_brightness"

Dans le code context.getResources().getInteger(R.integer.default_brightness)