Invité hardrocky Posté(e) 15 mars 2013 Share Posté(e) 15 mars 2013 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 More sharing options...
chpil Posté(e) 18 mars 2013 Share Posté(e) 18 mars 2013 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 More sharing options...
Invité hardrocky Posté(e) 18 mars 2013 Share Posté(e) 18 mars 2013 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 More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.