#android #preferenceactivity
#Android #preferenceactivity
Вопрос:
Возможно ли определить радиогруппу в PreferenceActivity? Я мог найти ListView только при предложении нескольких вариантов.
Я что-то упускаю?
Ответ №1:
Вы можете расширить любой Preference
класс. Я сделал именно то, что вы ищете, например, расширив PreferenceCategory
. Добавьте дочерние настройки (такие как PreferenceScreen
и EditTextPreference
), как обычно, с помощью addPreference()
, переопределите их и измените / установите ресурс виджета с помощью кода с помощью setWidgetLayoutResource()
. Естественно, ваш новый виджет должен содержать RadioButton
. Установите пользовательскую OnPreferenceClickListener
с setOnPreferenceClickListener()
помощью.
Затем получите ссылку на ViewGroup
«родительский элемент» в onCreateView()
. Затем вы можете привести ее к ListView
в onBindView()
и установить OnHierarchyChangeListener
для нее. Теперь вы получаете уведомление, когда дочерние Preference
View
элементы добавляются в ListView
. Установите новую View.OnClickListener
для новой View
в иерархии, но только если она View
содержит RadioButton
. Теперь управляйте щелчками.
На самом деле это довольно просто, если вам нужно только добавить PreferenceScreen
в качестве дочерних элементов. Мне также нужно было это с EditTextPreference
, что было сложной частью.
Преимущества просты: вы получаете внешний вид и поведение фреймворка предпочтений по умолчанию вне контекста ListPreference
. A ListPreference
также выглядит по-другому. Кроме того, ListPreference
может содержать только предопределенные значения. Итак, если вам нужно, чтобы EditTextPreference
было выбрано с помощью переключателя, это было бы невозможно.
Комментарии:
1. Это сложнее и более хрупко, чем простое расширение
Preference
илиDialogPreference
. Например, вы предполагаете, чтоViewGroup
являетсяListView
(не гарантируется). Поскольку вы отклонили мой ответ, можно было бы надеяться, что вы придумали что-то, что на самом деле лучше, а не хуже.2. Все представления предпочтений обычно привязаны к
ListView
. Я не понимаю вашей точки зрения. Кроме того, всегда есть возможность добавить некоторые проверки.3. «Все представления предпочтений обычно привязаны к ListView» — это деталь реализации. Android 5.0 может это изменить. Не создавайте производственный код, который зависит от деталей реализации.
4. Это могло бы быть, но это проблема другого дня и совершенно другой темы. Использование SDK также не является гарантией прямой совместимости. Вопрос был в том, возможно ли это. Да, это так.
5. Я никогда не говорил, что это невозможно. Вы не объяснили, почему ваше решение было лучше моего, и, следовательно, оправдали свой отказ от моего ответа. И хотя «привязка к SDK также не является гарантией прямой совместимости», это не оправдывает намеренного ухудшения ситуации путем принятия деталей реализации.
Ответ №2:
Посмотрите на демонстрационные версии API App — Preferences — Настройки из XML или других примеров.
В принципе, вы можете скопировать этот код. Есть запись, которая отображает список с радиогруппой.
У меня сейчас нет кода, но вы можете взглянуть здесь, он похож:
http://www.kaloer.com/android-preferences
<ListPreference
android:title="List Preference"
android:summary="This preference allows to select an item in a array"
android:key="listPref"
android:defaultValue="digiGreen"
android:entries="@array/listArray"
android:entryValues="@array/listValues" />
Комментарии:
1. Все, что я вижу там, — это ListView. Это не конец света, но я бы предпочел радиогруппу, поскольку это выбор из 3 возможностей. OTOH, если стандартным способом является ListView, то я буду придерживаться этого.
2. Предоставленная вами ссылка не работает.
Ответ №3:
Возможно ли определить радиогруппу в PreferenceActivity?
Вы можете создать свой собственный DialogPreference
подкласс, в котором будет размещаться a RadioGroup
, но неясно, какую выгоду это даст вам по сравнению с a ListPreference
.
Я мог найти ListView только при предложении нескольких вариантов.
A ListPreference
предлагает один выбор, а не несколько вариантов. Существует новая MultiSelectListPreference
функция множественного выбора, но она появилась только на уровне API 11.
Комментарии:
1. > «но неясно, какую выгоду это вам даст» Выгода очевидна: одним щелчком мыши меньше и UX. Ожидается возможность наблюдения (пользователем) всех возможных вариантов в содержащем диалоговом окне.
2. @avesus: «Выгода очевидна: на один клик меньше и UX удобнее» — нажатие на
RadioButton
— это один клик. Щелчок поListView
строке выполняется одним щелчком мыши. «Ожидается наблюдаемость (пользователем) всех возможных вариантов в содержащем диалоговом окне» — «наблюдаемость» будет примерно равной, поскольку не все обязательно будет соответствовать экрану, и поэтому оба варианта должны будут поддерживать некоторую форму прокрутки.