Aller au contenu

PreferenceManager et defaultValue [résolu]


Invité hardrocky

Recommended Posts

Invité hardrocky

Bonjour à tous !

Voilà deux petits bouts de code :

preferences.xml

<ListPreference
android:key="tailleSynth"
android:dialogTitle="@string/taille"
android:entries="@array/tailles"
android:entryValues="@array/tailles_val"
android:title="@string/taille"
android:defaultValue="9" />

MainActivity.java dans onresume

SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
t.setTextSize(TypedValue.COMPLEX_UNIT_PT, Float.parseFloat(sharedPref.getString(SettingsActivity.tailleReco, ""))); // taille synthese

Lors que je vide le cache de mon app, au premier lancement de l'app, crash. Le logcat me dit NumerFormatException: Invalid float = ""

Je pense avoir compris ce qu'il se passe : au premier démarrage, la valeur par défaut 9 n'est pas prise en compte, du coup aucune valeur n'est chargée dans getString(SettingsActivity.tailleReco, ""). Par contre, si dans mon activité "settings" je modifie la valeur, cela fonctionne normalement.

Comment faire pour qu'au lancement de l'app, si l'utilisateur n'a pas modifié les paramètres manuellement, la valeur que j'ai spécifiée par défaut soit prise en compte ?

Merci

Edit : sujet à clore, je viens de trouver la réponse. Le deuxième argument de getString() est la valeur par défaut à prendre si rien n'est trouvé. Le defaultValue du fichier XML sert uniquement au rendu.

Lien vers le commentaire
Partager sur d’autres sites

Le defaultValue du XML ne sert pas qu'à l'IHM, il peut aussi servir à initialiser les preferences, et faire ce que tu voulais faire initialement.

Pour cela, il te faut faire un appel à PreferenceManager.setDefaultValues, dans le onCreate de ton Activity par exemple

 PreferenceManager.setDefaultValue(this, R.xml.preferences, true);

Cela initialise les preferences avec les valeurs par défaut indiquées dans le xml (cela ne le fait que s'il n'existe pas déjà une valeur, donc pas de risque d'écraser les valeurs stockées dans les preferences lors des prochains appels). Et cela évite par la suite de dupliquer la valeur par défaut (dans le XML, et lors des appels à getString/getInt/...)

Lien vers le commentaire
Partager sur d’autres sites

Invité hardrocky

Ah super, merci. Je ne voulais pas utiliser cette méthode car je pensais qu'elle initialisait les valeurs par défaut à chaque fois, même si l'utilisateur avait modifié les paramètres.

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...