2012-09-09 4 views
1

Android Guide vous recommande de définir les préférences dans les fichiers XML. Elles peuvent ensuite être chargées dans PreferenceActivity/PreferenceFragment etc. pour être visualisées et modifiées par l'utilisateur. Mais dans un scénario réel, l'utilisateur interagit d'abord avec d'autres activités, puis (peut-être) avec l'interface utilisateur des préférences. Et si l'activité du démarreur nécessitait certaines de ces préférences?Initialisation des préférences

Ils ne seront pas encore chargés, car les ressources de préférences n'ont pas encore été gonflées. Existe-t-il un moyen de pré-accéder aux préférences dans les fichiers XML?

Répondre

3

Oui. Lorsque vous demandez la préférence pour la première fois, vous pouvez lui donner une valeur par défaut. Par exemple. si vous chargez une préférence de type Int, alors vous pouvez le faire de la manière suivante d'une activité:

SharedPreferences defaultSettings = PreferenceManager.getDefaultSharedPreferences(this); 
int preferenceValue = defaultSettings.getInt("PreferenceName", 7); 

Ce chargerait votre preferenceValue être 7 (sans cette préférence être jamais encore initialisées). Cela suppose que dans votre fichier de préférences XML, vous avez une préférence de clé "PreferenceName". Si vous envisagez d'éditer cette préférence dans l'activité avant l'activité des préférences a été couru, assurez-vous de vous engager vos modifications avec un SharedPreferenceEditor:

// ... change to preferenceValue occurs prior to this code 
SharedPreferences.Editor defaultEditor = defaultSettings.edit(); 
defaultEditor.putInt("PreferenceName", preferenceValue); 
defaultEditor.commit(); 

Nous voulons probablement éviter « PreferenceName » dans une affaire hardcoded cependant, et au lieu de l'utiliser comme une chaîne dans le fichier strings.xml. De cette façon, il peut être saisi à la fois à partir du code initial lorsque la préférence n'a pas encore été enregistrée et à partir du fichier XML Préférence. Cela signifie que notre code ci-dessus substituerait la chaîne « PreferenceName » avec quelque chose comme ce qui suit:

getResources().getString(R.string.pref_name) 

Et dans votre fichier XML Preference vous souhaitez référencer la clé de la manière suivante:

android:key="@string/pref_name" 
android:defaultValue="7" 

Cela devrait couvrir "pré-chargement" de la préférence ainsi que d'essayer de garder la plupart des paramètres de l'application dans un seul endroit. Il peut en effet y avoir chevauchement en termes de création/chargement de la préférence XML avant que l'activité initiale ne se produise, mais je ne l'ai pas encore testé.

EDIT: Il se trouve au lieu d'utiliser le code ci-dessus, vous pouvez directement charger le fichier XML (avec sa préférence par défaut) par la méthode suivante:

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

Plus d'informations sur cette méthode peut être trouvé dans la documentation pour le PreferenceManager: http://developer.android.com/reference/android/preference/PreferenceManager.html

+0

Merci, je pense qu'une installation pour pré charger les préférences devrait être fournie dans Android. . ** Modifier ** 'PreferenceManager.setDefaultValues ​​()' C'est ce que je cherchais.Merci encore. –

+0

Pas de problème. Je suis d'accord, cela semble être une excellente idée pour une option à avoir dans le manifeste lui-même ... Je ne sais pas si cela existe ou n'existe pas, mais si c'était le cas je me demandais ce qui se passerait si plusieurs fichiers XML étaient listés avec des valeurs par défaut contradictoires ... de toute façon, je suis heureux d'avoir aidé. –