Arriver entier ou des valeurs de l'indice à partir d'une liste de préférences
Je suis la création de listes dans un partage des préférences et lorsque le onPreferenceChanged() la méthode est appelée je veux extraire l'index de l'élément dans la liste ou une valeur entière dans certains cas. Je suis en train de construire les données xml comme suit:
dans les tableaux:
<string-array name="BackgroundChoices">
<item>Dark Background</item>
<item>Light Background</item>
</string-array>
<array name="BackgroundValues">
<item>1</item>
<item>0</item>
</array>
<string-array name="SpeedChoices">
<item>Slow</item>
<item>Medium</item>
<item>Fast</item>
</string-array>
<array name="SpeedValues">
<item>1</item>
<item>4</item>
<item>16</item>
</array>
dans les préférences de fichier xml:
<PreferenceScreen android:key="Settings"
xmlns:android="http://schemas.android.com/apk/res/android"
android:title="Settings">
<ListPreference
android:key="keyBackground"
android:entries="@array/BackgroundChoices"
android:summary="Select a light or dark background."
android:title="Light or Dark Background"
android:positiveButtonText="Okay"
android:entryValues="@array/BackgroundValues"/>
<ListPreference
android:key="keySpeed"
android:entries="@array/SpeedChoices"
android:summary="Select animation speed."
android:title="Speed" android:entryValues="@array/SpeedValues"/>
</PreferenceScreen>
Donc mon xml ne fonctionne pas. Je sais comment le faire à l'aide d'un string-array plutôt qu'un tableau pour les valeurs. Et je pourrais sortir des chaînes de valeur et en tirer ce que je veux partir, mais je préfère (si possible) être en mesure d'avoir des listes où les valeurs étaient entiers, des booléens ou des enums. Quelle est la façon habituelle de faire cela?
merci d'avance,
Jay
Vous devez vous connecter pour publier un commentaire.
Mettre les préférences en tant que
String
et l'utilisationInteger.parseInt()
. Je pense qu'il est en fait un rapport de bug sur la limitation, vous faites allusion, mais je ne trouve pas le lien. Par expérience, je peux vous dire simplement utiliserStrings
et de sauver votre auto beaucoup de frustration.Note à d'autres utilisateurs, si vous pouvez me prouver le contraire, je le salue.
Andrew était correct, le fil est ici:
c'est encore de commentaires, et encore pas de changement (comme des 2.3.3 de toute façon).
Entier.parseInt() de .valueOf() aura à travailler. Si valueOf() fonctionne sans erreur, l'utiliser, car elle ne permet pas d'allouer autant que parseInt() n', utile lorsque vous avez BESOIN pour éviter la GC comme je le fais.
Basé sur Android est ListPreference, j'ai créé IntListPreference. L'utilisation est compliquée - il suffit de mettre ce morceau de code dans vos préférences xml:
et que, dans strings.xml
Voici un
ListIntegerPreference
classe que j'utilise (écrit pourcom.android.support:preference-v7:24.0.0
). Il écrase un peu les méthodes et les convertit entreInteger
etString
si possible, de sorte que la baseListPreference
ne reconnaissent pas, que vous travaillez avecIntegers
au lieu deStrings
.Je suis en utilisant ce avec la création de
ListPreferences
valeurs via le code, il suffit de l'essayer. Il peut travailler tout de suite, ou peut-être vous avez besoin de remplacer des fonctions supplémentaires. Si oui, c'est un bon début, et vous montre comment vous pouvez le faire...