J'ai une activité de préférence qui utilise une liste de préférences telle que définie par mon fichier XML. Comment définir le résumé de l'activité de liste sur la valeur sélectionnée?
Je vous remercie!
Le moyen le plus simple de le faire est simplement de laisser Android le faire pour vous. En supposant que vous souhaitiez que le résumé corresponde à la valeur sélectionnée, vous pouvez simplement définir le résumé du sur ListPreference
à l'"%s"
aide de XML ou de la setSummary
méthode Java. Par exemple:
<ListPreference
android:key="pref_list"
android:title="A list of preferences"
android:summary="%s"
android:entries="@array/pref_list_entries"
android:entryValues="@array/pref_list_entries_values"
android:defaultValue="0" />
Android remplacera %s
par la valeur de chaîne actuelle de la préférence, telle qu'affichée par le ListPreference
sélecteur de. Le résumé de la liste sera également défini correctement lorsque vous entrerez dans l'activité - vous n'avez pas à écrire de code spécial pour la configurer initialement.
Cela fonctionne également avec AndroidX ListPreference
.
J'ai passé beaucoup trop de temps à jouer avec les SharedPreferences
auditeurs avant de découvrir cela.
"%s"
? Dans mes tests,"%s"
ne fonctionne pas avec Gingerbread et les versions antérieures.androidx
.Vous pouvez utiliser
OnPreferenceChangeListener
pour modifier dynamiquement le résumé. Le problème est qu'il obtient la valeur sélectionnée (deandroid:entryValues
), pas la légende (android:entries
). Dans le code suivant, j'ai utilisétoString()
, mais la solution appropriée est de trouver la légende de la valeur. Quoi qu'il en soit, l'idée fonctionne:la source
Je voulais aussi réaliser quelque chose de similaire, mais le problème avec https://stackoverflow.com/a/8155029/592025 est que, il montre la valeur de ma préférence (comme 1, 2 3, etc.). Je veux afficher l'entrée (chaîne lisible par l'homme) correspondant à la valeur sélectionnée.
Alors je l'ai changé de cette façon et fonctionne comme j'en ai besoin.
L'astuce consiste à utiliser
getEntry()
au lieu degetValue()
et une fois que la valeur est modifiée, pour définir la valeur explicitement et relire l'entrée.la source
Je pense que ce que vous recherchez est beaucoup plus simple que vous pouvez penser, ajoutez la ligne de code suivante à votre
Preference
élément:Cela ressemblera donc à quelque chose comme ceci:
la source
Obtenez d'abord une référence à ListPreference dans votre onCreate. Vous pouvez utiliser findPreference (). Par exemple:
Ensuite, lorsque vous chargez l'activité pour la première fois et chaque fois que la valeur des préférences est modifiée, utilisez la méthode de votre choix pour obtenir la valeur de ListPreference et définissez le résumé avec:
la source
C'est le code que j'utilise, il n'appelle pas setValue manuellement, car je pense que cela est déjà fait à un stade ultérieur.
Voici un exemple:
la source
C'est exactement ce que j'ai fait et cela fonctionne très bien. Dans le onSharedPreferenceChangeListener, je vérifie simplement la clé de ce qui est changé, puis pour ListPreferences, je le reconvertis en lisible par l'homme (entrée au lieu de entryValue) avec les instructions if. Assez simple.
mise en page xml
tableau xml
la source
Voici une version développée de la réponse de midhunhk qui traite également de la chaîne utile "android: summary"
Et, pour être clair, android: summary est supprimé du xml associé.
la source
Et voici une façon de gérer la mise à jour récapitulative de la préférence de sonnerie après une sélection d'utilisateur.
la source
Vous avez une méthode bindPreferenceSummaryToValue sur votre PreferenceActivity,
vous pouvez facilement ajouter le résumé à la liste en procédant comme suit:
Sur votre méthode OnCreate, vous appelez la fonction de liaison comme ceci:
Vous pouvez facilement ajouter d'autres récapitulatifs de la même manière:
la source
sous onCreatePreferences, faites ceci:
la source