Ich habe eine Voreinstellungsaktivität, die Listeneinstellungen verwendet, wie sie in meiner XML-Datei definiert sind. Wie würde ich die Zusammenfassung der Listenaktivität auf den ausgewählten Wert setzen?
Danke dir!
Der einfachste Weg, dies zu tun, besteht darin, Android dies für Sie tun zu lassen. Angenommen, Sie möchten, dass die Zusammenfassung mit dem ausgewählten Wert übereinstimmt, können Sie die ZusammenfassungListPreference
"%s"
einfach so festlegen , dass entweder XML oder die setSummary
Methode in Java verwendet wird. Beispielsweise:
<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 wird durch %s
den aktuellen Zeichenfolgenwert der Voreinstellung ersetzt, der von der ListPreference
Auswahl des Benutzers angezeigt wird . Die Zusammenfassung der Liste wird auch beim Eingeben der Aktivität korrekt festgelegt. Sie müssen keinen speziellen Code schreiben, um sie zunächst einzurichten.
Dies funktioniert auch mit AndroidX ListPreference
.
Ich habe viel zu viel Zeit damit verbracht, mich mit den SharedPreferences
Zuhörern zu beschäftigen, bevor ich das entdeckte.
"%s"
? Funktioniert in meinen Tests"%s"
nicht mit Lebkuchen und früheren Versionen.androidx
.Mit können Sie
OnPreferenceChangeListener
die Zusammenfassung dynamisch ändern. Das Problem ist, dass es den ausgewählten Wert (vonandroid:entryValues
) erhält , nicht die Beschriftung (android:entries
). Im folgenden Code habe ich verwendettoString()
, aber die richtige Lösung besteht darin, die Beschriftung für den Wert zu finden. Wie auch immer, die Idee funktioniert:quelle
Ich wollte auch etwas Ähnliches erreichen, aber das Problem mit https://stackoverflow.com/a/8155029/592025 ist, dass es den Wert für meine Präferenz anzeigt (wie 1, 2 3 usw.). Ich möchte den Eintrag (lesbare Zeichenfolge) anzeigen, der dem ausgewählten Wert entspricht.
Also habe ich es so geändert und arbeite so, wie ich es brauche.
Der Trick besteht darin,
getEntry()
anstellegetValue()
und nach Änderung des Werts den Wert explizit festzulegen und den Eintrag zurückzulesen.quelle
Ich denke, dass das, wonach Sie suchen, viel einfacher ist, als Sie denken können. Fügen Sie Ihrem
Preference
Artikel die folgende Codezeile hinzu :Es wird also ungefähr so aussehen:
quelle
Holen Sie sich zuerst einen Verweis auf die ListPreference in Ihrem onCreate. Sie können findPreference () verwenden. Beispielsweise:
Verwenden Sie dann beim ersten Laden der Aktivität und beim Ändern des Voreinstellungswerts eine beliebige Methode, um den Wert der ListPreference abzurufen, und legen Sie die Zusammenfassung fest mit:
quelle
Dies ist der Code, den ich verwende. Er ruft setValue nicht manuell auf, da ich glaube, dass dies bereits zu einem späteren Zeitpunkt erfolgt.
Hier ist ein Beispiel:
quelle
Genau das habe ich getan und es funktioniert großartig. Im onSharedPreferenceChangeListener überprüfe ich einfach den Schlüssel, der geändert wird, und konvertiere ihn dann für ListPreferences mit den if-Anweisungen zurück in den lesbaren Wert (Eintrag anstelle von entryValue). Ziemlich einfach.
XML-Layout
XML-Array
quelle
Hier ist eine erweiterte Version von Midhunhks Antwort, die sich auch mit der hilfreichen Zeichenfolge "android: summary" befasst
Und um ganz klar zu sein, android: summary wird aus der zugehörigen XML entfernt.
quelle
Und hier ist eine Möglichkeit, das zusammenfassende Update der Klingeltoneinstellung nach einer Benutzerauswahl zu verarbeiten.
quelle
Sie haben eine Methode bindPreferenceSummaryToValue für Ihre PreferenceActivity.
Sie können die Zusammenfassung einfach wie folgt zur Liste hinzufügen:
Bei Ihrer OnCreate-Methode rufen Sie die Bindefunktion folgendermaßen auf:
Sie können andere Zusammenfassungen auf die gleiche Weise hinzufügen:
quelle
unter onCreatePreferences tun Sie dies ::
quelle