PreferenceActivity: enregistrer la valeur as integer
À l'aide d'un simple EditTextPreference
dans mes préférences de l'activité:
<EditTextPreference
android:key="SomeKey"
android:title="@string/some_title"
android:summary="..."
android:numeric="integer"
android:maxLength="2"
/>
Est-il possible que la valeur de la configuration serait économisé en entier? Semble maintenant, il permet de saisir des chiffres, mais la valeur est toujours enregistré comme une chaîne de caractères:
Appel:
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
int value = preferences.getInt("SomeKey", -1);
me jette java.lang.ClassCastException: java.lang.String
, et:
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
String value = preferences.getString("SomeKey", "-1");
récupère la valeur avec succès.
Comment faire PreferenceActivity
pour enregistrer la valeur as integer par défaut?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez étendre EditTextPreference:
Il serait préférable de remplacer onSetInitialValue() et setText() les méthodes, mais alors vous devez copier le code d'une classe de base. Au-dessus de la solution est plus simple, mais c'est assez délicat - "chaîne" méthodes de faire quelque chose avec ints. Essayez de ne pas étendre cette classe d'aller plus loin 😉
Vous pouvez l'utiliser à partir de XML par:
TextWatcher
, assurez-vous que le texte de l'utilisateur entrée n'est pas vide, et la valeur par défaut est0
.return String.valueOf(getPersistedInt(-1));
, impossible de démarrer l'activité en raison de cette lignereturn String.valueOf(getPersistedInt(-1));
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
Même si vous définissez android:numérique="integer" ça va être du texte de préférence - comme son nom le suggère. Vous pouvez facilement convertir de la chaîne de valeur de type int utilisant Entier.valueOf().
Aussi, vous pourriez remplacer PreferenceActivity la conversion automatiquement sur la sortie.Je pense que la meilleure solution est d'écrire méthode simple pour obtenir cette valeur à partir des préférences. Quelque chose comme:
Alors vous pouvez très facilement utiliser à partir de votre code.
PreferenceActivity
l'enregistrement automatiquement, dois-je remplacer une méthode pour obtenir la valeur ou de faire tous les sauver moi-même à la place?SharedPreferences
agetInt
méthode déjà, donc toujours l'espoir en quelque sorte de trouver un moyen de direPreferenceActivity
pour enregistrer la valeur comme de type int - toutes les fonctionnalités sont là... juste ne fonctionne pas comme whished...Même si une Réponse a été garé accepté, je voudrais partager une plus courte de manière à obtenir ceci :
Puisque vous avez déjà établi que seuls les chiffres ce ne sera pas une exception.
pourtant, pour compléter ma réponse :
J'ai eu le même Problème. (Je voulais SharedPreference de me donner un numéro de port que j'ai stocké dans un préférences de fichier xml en tant que valeur par défaut).
La mise en œuvre de toutes les SharedPreferences méthodes serait de beaucoup d'efforts, donc l'écriture d'une méthode personnalisée dans la classe instanciée les SharedPreferences, comme broot suggéré serait mieux je pense.
Vous pouvez aussi simplement utiliser la méthode Statique de type Entier dans la ligne où vous en avez besoin:
Je pense que c'est le plus court que je pouvais venir: