Mam działanie preferencji, które używa preferencji listy zdefiniowanych w moim pliku XML. Jak ustawić podsumowanie aktywności na liście na wybraną wartość?
Dziękuję Ci!
Najłatwiej to zrobić, jeśli Android zrobi to za Ciebie. Zakładając, że chcesz, aby podsumowanie było zgodne z wybraną wartością, możesz po prostu ustawić podsumowanie ListPreference
na"%s"
używając XML lub setSummary
metody w Javie. Na przykład:
<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" />
System Android zastąpi %s
bieżącą wartością ciągu preferencji wyświetlaną przez ListPreference
selektor 's. Podsumowanie listy zostanie również ustawione poprawnie, gdy wprowadzisz aktywność - nie musisz pisać żadnego specjalnego kodu, aby skonfigurować ją na początku.
Działa to również z AndroidX ListPreference
.
Spędziłem zdecydowanie zbyt dużo czasu mucking ze SharedPreferences
słuchaczy zanim to odkryłem.
"%s"
? W moich testach"%s"
nie działa z Gingerbread i wcześniejszymi wersjami.androidx
.Możesz użyć,
OnPreferenceChangeListener
aby dynamicznie zmienić podsumowanie. Problem polega na tym, że pobiera wybraną wartość (odandroid:entryValues
), a nie podpis (android:entries
). W poniższym kodzie użyłemtoString()
, ale właściwym rozwiązaniem jest znalezienie podpisu dla wartości. Tak czy inaczej, pomysł działa:źródło
Chciałem też osiągnąć coś podobnego, ale problem z https://stackoverflow.com/a/8155029/592025 polega na tym, że pokazuje wartość dla moich preferencji (np. 1, 2 3 itd.). Chcę pokazać wpis (ciąg czytelny dla człowieka) odpowiadający wybranej wartości.
Więc zmieniłem to w ten sposób i działa tak, jak tego potrzebuję.
Sztuczka polega na tym, aby użyć
getEntry()
zamiastgetValue()
i po zmianie wartości, ustawić wartość jawnie i odczytać wpis.źródło
Myślę, że to, czego szukasz, jest o wiele prostsze niż myślisz, dodaj następującą linię kodu do swojego
Preference
przedmiotu:Więc będzie wyglądać mniej więcej tak:
źródło
Najpierw uzyskaj odwołanie do ListPreference w swoim onCreate. Możesz użyć findPreference (). Na przykład:
Następnie, po pierwszym załadowaniu działania i za każdym razem, gdy wartość preferencji zostanie zmieniona, użyj dowolnej metody, aby uzyskać wartość elementu ListPreference i ustaw podsumowanie za pomocą:
źródło
To jest kod, którego używam, nie wywołuje on ręcznie metody setValue, ponieważ uważam, że jest to już zrobione na późniejszym etapie.
Oto przykład:
źródło
To jest dokładnie to, co zrobiłem i działa świetnie. W onSharedPreferenceChangeListener po prostu sprawdzam klucz tego, co się zmienia, a następnie w przypadku ListPreferences konwertuję go z powrotem na czytelny dla człowieka (entry zamiast entryValue) za pomocą instrukcji if. Dość proste.
xml
xml tablica
źródło
Oto rozszerzona wersja odpowiedzi midhunhk, która odnosi się również do pomocnego ciągu znaków „android: summary”
Dla jasności, android: summary jest usuwany z powiązanego pliku XML.
źródło
A oto jeden ze sposobów radzenia sobie z podsumowującą aktualizacją preferencji dzwonka po wyborze użytkownika.
źródło
Masz metodę bindPreferenceSummaryToValue na swoim PreferenceActivity,
możesz łatwo dodać podsumowanie do listy, wykonując następujące czynności:
W metodzie yout OnCreate wywołujesz funkcję bind w następujący sposób:
Możesz łatwo dodać inne podsumowanie w ten sam sposób:
źródło
w onCreatePreferences zrób to:
źródło