У меня есть действие Preference, в котором используется список настроек, определенный в моем XML-файле. Как мне установить для сводки активности списка выбранное значение?
Спасибо!
Самый простой способ сделать это - попросить Android сделать это за вас. Предполагая, что вы хотите, чтобы сводка соответствовала выбранному значению, вы можете просто установить сводку ListPreference
для"%s"
использования либо XML, либо setSummary
метода в Java. Например:
<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 заменит %s
текущее строковое значение предпочтения, как показано в ListPreference
средстве выбора. Сводка списка также будет правильно настроена при входе в действие - вам не нужно писать какой-либо специальный код для его первоначальной настройки.
Это также работает с AndroidX ListPreference
.
Я потратил далеко слишком много времени отвода с SharedPreferences
слушателями , прежде чем я узнал об этом.
"%s"
? В моих тестах"%s"
не работает с Gingerbread и более ранними версиями.androidx
.Вы можете использовать
OnPreferenceChangeListener
для динамического изменения сводки. Проблема в том, что он получает выбранное значение (изandroid:entryValues
), а не заголовок (android:entries
). В следующем коде я использовалtoString()
, но правильное решение - найти заголовок для значения. В любом случае, идея работает:источник
Я также хотел добиться чего-то подобного, но проблема с https://stackoverflow.com/a/8155029/592025 заключается в том, что он показывает значение для моих предпочтений (например, 1, 2 3 и т. Д.). Я хочу показать запись (удобочитаемую строку), соответствующую выбранному значению.
Поэтому я изменил его так, и теперь он работает так, как мне нужно.
Хитрость заключается в том, чтобы
getEntry()
вместоgetValue()
и после изменения значения явно установить значение и прочитать запись.источник
Я думаю, что то, что вы ищете, намного проще, чем вы можете подумать, добавьте следующую строку кода в свой
Preference
элемент:Это будет выглядеть примерно так:
источник
Сначала получите ссылку на ListPreference в своем onCreate. Вы можете использовать findPreference (). Например:
Затем, когда вы впервые загружаете Activity и всякий раз, когда значение предпочтений изменяется, используйте любой метод, который вы хотите получить, чтобы получить значение ListPreference, и установите сводку с помощью:
источник
Это код, который я использую, он не вызывает setValue вручную, поскольку я считаю, что это уже сделано на более позднем этапе.
Вот пример:
источник
Это именно то, что я сделал, и это отлично работает. В onSharedPreferenceChangeListener я просто проверяю ключ того, что изменяется, а затем для ListPreferences конвертирую его обратно в удобочитаемый (запись вместо entryValue) с помощью операторов if. Довольно просто.
макет xml
xml массив
источник
Вот расширенная версия ответа midhunhk, которая также касается полезной строки «android: summary».
И, для ясности, android: summary удален из соответствующего xml.
источник
И вот один из способов справиться с обновлением сводки предпочтений мелодии звонка после выбора пользователя.
источник
У вас есть метод bindPreferenceSummaryToValue в вашем PreferenceActivity,
вы можете легко добавить резюме в список, выполнив следующие действия:
В вашем методе OnCreate вы вызываете функцию привязки следующим образом:
Таким же образом вы можете легко добавить другие резюме:
источник
в onCreatePreferences сделайте следующее:
источник