Элемент ListPreference
Понятно, что нужен какой-то пользовательский интерфейс, чтобы пользователь мог просмотреть список вариантов сортировки. Этот список может содержать переключатели для каждого варианта со стандартным или текущим выбором.
содержит фрагмент XML с описанием настроек просмотра авиарейсов. Он также содержит класс активности, который загружает XML-файл настроек. Давайте начнем с XML-разметки. Android предоставляет сквозную инфраструктуру настроек. Это значит, что она позволяет определить настройки, отобразить их пользователю и сохранить выбор пользователя в хранилище данных. Настройки определяются в XML- файле, который находится в каталоге /res/xml/. Чтобы показать настройки пользователю, необходим класс активности, расширяющий класс android.preference. PreferenceActivity, и метод addPreferencesFromResource() , позволяющий добавить ресурс в коллекцию ресурсов активности. Обо всем остальном (отображение и сохранение) позаботится инфраструктура.
В этом сценарии с авиарейсами создается файл flightoptions.xml в каталоге /res/xml/. Затем создается класс активности FlightPreferenceActivity, расширяющий класс android.preference.PreferenceActivity. Далее вызывается метод addPreferencesFromResource() , которому передается ресурс R.xml.flightoptions.
Обратите внимание, что в XML-файле ресурсов настроек указывается несколько строковых ресурсов, и для успешной компиляции необходимо добавить в проект и эти ресурсы. Ниже мы покажем, как это сделать. А пока взгляните на пользовательский интерфейс, сгенерированный ом 13.1.
На рис. 13.1 показано два представления. Представление слева называется экраном настроек, а пользовательский интерфейс справа — списком настроек. Если пользователь щелкнет на пункте Flight Options (Параметры просмотра), появится представление Choose Flight Options (Выбор параметров просмотра) в виде модального диалогового окна с переключателями для каждого варианта. Когда пользователь в следующий раз откроет экран настроек, там будет отображен сохраненный ранее выбор.
XML-код в е 13.1 определяет элемент PreferenceScreen, а затем создает его дочерний элемент ListPreference. Для PreferenceScreen устанавливаются три свойства: key, title и summary. Свойство key — это строка, позволяющая обратиться к элементу программным образом (аналогично android:id), title — заголовок экрана (Flight Options (Параметры просмотра)), а summary — описание назначения экрана, выведенное под заголовком более мелким шрифтом (в данном случае — Set Search Options (Установите параметры поиска)). Для списка настроек необходимо установить key, title и summary, а также атрибуты entries, entryValues, dialogTitle и defaultValue.
После запуска этого приложения сначала появится простое текстовое сообщение option value is 1 (# of Stops) (значение параметра равно 1 (количество посадок)). Щелкните на кнопке Menu (Меню) и выберите пункт Settings (Параметры), чтобы запустить активность PreferenceActivity. По завершении щелкните на кнопке Back (Назад), и вы сразу же увидите изменения в тексте параметра.
В начале мы поговорим о файле /res/values/arrays.xml. Он содержит два строковых массива, необходимые для реализации вариантов выбора. Первый массив хранит отображаемый текст, а второй — значения, получаемые в вызовах методов, плюс значение, хранимое в XML-файле настроек. Здесь мы решили использовать для flight_sort_options_values индексные значения 0, 1 и 2, но годится любое значение, которое помогает выполнять приложение. Если бы наш параметр был числовым по своей природе (например, таймер обратного отсчета), то использовались бы значения вроде 60, 120, 300 и т.д. Однако значения не обязательно должны быть числовыми — главное, чтобы они были понятны разработчику, а пользователь все равно их не увидит, если только они не будут выводиться на экран. Пользователь увидит только текст из первого строкового массива flight_sort_options.
Как уже было сказано, инфраструктура Android также отвечает за хранение настроек. Например, когда пользователь выбирает вариант сортировки, Android сохраняет его выбор в XML-файле в каталоге /data приложения.
Видно, что инфраструктура настроек для списковой настройки сохраняет значение выбранного элемента с использованием атрибута key. Обратите также внимание, что сохраняется числовое значение выбранного элемента, а не его текст. И поскольку XML-файл настроек хранит только значение, а не текст, то если понадобится изменить приложение и текст вариантов или добавить элементы в строковые массивы, то нужно, чтобы все значения, хранимые в XML-файле настроек, после изменения соответствовали своим текстам. Во время обновления приложения файл настроек остается без изменений, и если до обновления значение 1 означало “Количество посадок”, то оно должно означать “Количество посадок” и после обновления.
Следующим мы рассмотрим файл /res/values/strings.xml. Мы добавили в нем несколько строк для заголовков, кратких сводок и пунктов меню. Две строки заслуживают более пристального внимания. Первая из них — flight_sort_option_default_value. Значение по умолчанию установлено в 1, что означает в нашем примере “# of Stops” (Количество посадок). Обычно для каждого параметра лучше предусматривать значение по умолчанию. Если оно не указано и пользователь не сделал свой выбор, то методы, возвращающие значение параметра, возвратят null, и тогда в коде придется обрабатывать эти значения null. Еще одной интересной строкой является selected_flight_ sort_option. Строго говоря, пользователь не должен видеть эту строку, и поэтому ее не обязательно помещать в strings.xml, чтобы получить альтернативные тексты на других языках. Однако поскольку это строковое значение является ключом, который используется в вызовах методов для извлечения значения, его превращение в идентификатор поможет обеспечить на этапе компиляции отсутствие опечаток в имени ключа.
Далее идет исходный код MainActivity — базовой активности, которая получает ссылку на настройки и дескриптор TextView, а затем вызывает метод чтения текущего значения параметра, чтобы занести его в TextView. Компоновка приложения здесь не показана, но она просто содержит элемент TextView для отображения сообщения о текущем значении параметра настройки. В коде устанавливается меню и обратный вызов для меню. В этом обратном вызове запускается экземпляр Intent для активности FlightPreferenceActivity. Запуск намерения для работы с настройками — лучший способ вывода экрана настроек. Такой запуск можно выполнить с помощью меню или кнопки. В последующих примерах мы не будем повторять этот код, а вам потребуется сделать то же самое, только изменив имя класса активности. После возврата намерения для настроек мы вызываем метод setOptionText() , чтобы обновить содержимое TextView.
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.