Jump to content

PreferenceManager et defaultValue [résolu]


Guest hardrocky

Recommended Posts

Guest 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.

Link to comment
Share on other 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/...)

Link to comment
Share on other sites

Guest 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.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...