2010-05-01 5 views
10

J'ai Listpreferences dans mon application. Ils ne semblent pas être réglés à leurs valeurs par défaut juste après l'installation - ils semblent être nulles. J'essaie de comprendre pourquoi mes préférences par défaut ne sont pas définies juste après l'installation. Dans mon code principal je:Android: SharedPreference: Les paramètres par défaut ne sont pas définis au démarrage

 SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); 

     InUnits = sp.getString("List1", "defValue"); 
     InAngs = sp.getString("List2", "defValue"); 
     OutUnits = sp.getString("List3", "defValue"); 
     OutAngs = sp.getString("List4", "defValue"); 

Juste après le code ci-dessus exécute, chaque variable contient « ValeurDéfaut » au lieu des valeurs réelles que j'ai assigné dans mon ListPreference ci-dessous.

Mon fichier xml de préférences s'appelle "settings.xml". Voici ce que l'un des ListPreferences regarde là comme:

 <ListPreference 
     android:key="List1" 
     android:title="Input: Alph" 
     android:summary="Choose Alph or Ralph" 
     android:entries="@array/inputAlph" 
     android:entryValues="@array/input_Alph_codes" 
     android:dialogTitle="Input Alph" 
     android:defaultValue="ININ"/>   

Voici ce que certains de mon fichier strings.xml ressemble:

<string-array name="inputUnits"> 
    <item>Alph</item> 
    <item>Ralph</item> 
    </string-array> 
    <string-array name="input_Alph_codes"> 
    <item>ININ</item> 
    <item>INMM</item> 
    </string-array> 

Quand je vais au menu, puis les paramètres, je peux voir mon paramètres par défaut vérifiés (radiobuttoned). Puis quand je reviens du menu des paramètres à mon écran principal - tout va bien - pour la vie! ... puis chaque var ci-dessus reçoit la valeur par défaut appropriée. Cela ne se produit que lorsque j'applique mon application pour la première fois sur le téléphone. Après que je suis allé à l'écran des paramètres une fois, puis à droite, l'application est bien et accepte tous les changements de paramètres. Par ailleurs, comme vous pouvez le voir, "List1" est la clé android: dans un fichier nommé settings.xml dans mon dossier res/xml.

+0

Une correction ci-dessus: Dans mon exemple de code strings.xml ci-dessus, le nom chaîne de tableau ne doit pas lire "inputUnits" mais aurait dû être: Allan

+0

duplication possible de [Préférences Android: Comment charger les valeurs par défaut lorsque l'utilisateur n'a pas utilisé l'écran des préférences?] (Http://stackoverflow.com/questions/2691772/android-preferences-how-to-load- the-default-values-when-the-utilisateur-hasnt-used-th) –

Répondre

20

Ils ne semblent pas être mise à leurs valeurs par défaut juste après l'installation - ils semblent être nulle.

C'est ce qui est censé se produire.

Je suis en train de comprendre pourquoi ne sont pas mis mes préférences par défaut juste après l'installation.

Ils ne sont pas supposés l'être. La préférence XML que vous avez listée ici n'est utilisée que pour renseigner un PreferenceActivity, rien de plus. Jusqu'à ce que l'utilisateur ouvre le PreferenceActivity, les préférences seront nulles et les valeurs par défaut que vous fournissez aux getters SharedPreferences seront retournées.


MISE À JOUR

Vous pouvez utiliser setDefaultValues() sur PreferenceManager pour affecter les valeurs par défaut de votre XML préférence à un SharedPreferences. Cependant, faites attention au timing - cela fera des E/S disque, et donc idéalement est effectué sur un thread d'arrière-plan.

+0

Cela clarifie vraiment beaucoup de choses pour moi. Vous avez été très utile. – Allan

+0

Puis-je utiliser du code pour examiner ces préférences par défaut et les affecter au démarrage initial du programme? – Allan

+0

Vous pouvez charger et parcourir le fichier XML de préférence, si vous le souhaitez. Cependant, à moins d'avoir un tas de préférences, il est probablement plus simple d'aller un peu moins au DRY et de définir deux fois les valeurs par défaut: une fois dans les préférences XML et une fois dans les appels getter. – CommonsWare

-1

Vous pouvez spécifier une valeur par défaut comme celui-ci

SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this); 
pref.getString("thePrefKey", "theDefaultValue"); 

Le android: defaultValue = "..." dans les paramètres "de mise en page".xml est uniquement une aide visuelle pour l'utilisateur

+0

C'est exactement ce qu'il fait déjà, car j'ai exactement la même question – Darrell

10

Définissez les valeurs par défaut sur SharedPreferences à partir de votre préférence XML.

PreferenceManager.setDefaultValues(Context context, int resourceId, boolean readAgain) 

PreferenceManager.setDefaultValues

Questions connexes