Вложенные PreferenceScreens в динамическом списке предпочтений на Android - PullRequest
9 голосов
/ 25 января 2011

Я пытаюсь создать экран настроек с динамическим списком записей, и при нажатии на каждую из них у меня появляется другой экран настроек.В качестве примера рассмотрим список почтовых учетных записей, для каждой из которых доступны настройки их учетных записей.

Хотя я могу создать нужную вложенность, используя только PreferenceScreens, ее нельзя легко масштабировать до нескольких записей.без создания в каждом коде структуры подвыборок.

Я вижу несколько разных вариантов в пользовательском интерфейсе Android.

Есть ли рекомендуемый способ создания такой структуры, как эта?

Возможные варианты:

  1. Отдельные, независимые действия
    Работает, но, на мой взгляд, беспорядочно

  2. Вложенный, созданный код PreferenceScreens
    Боль в заднице из-за сопровождения, и это означает, что предпочтения больше не хранятся в виде фрагментов XML

  3. Вложенные, раздутые PreferenceScreens
    Я не могу найти способ расширить другой XMLфайл в поддерево

  4. Один «вспомогательный» PreferenceScreen, который отображается с помощью setPreferenceScreen () для каждого
    Я не могу найти способ скрытьЭкран PreferenceScreen «шаблона» и он нарушает навигацию.

Пример XML:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
    android:title="@string/prefs_title">
    <EditTextPreference android:key="add_console"
        android:title="@string/prefs_add_console"></EditTextPreference>
    <PreferenceCategory android:title="@string/prefs_consoles_title"
        android:key="list">
        <PreferenceScreen android:summary="http://cctv.icode.co.uk/"
            android:title="iCode Console">
        </PreferenceScreen>
        <PreferenceScreen android:summary="http://test.icode.co.uk/"
            android:title="Test Console">
        </PreferenceScreen>
    </PreferenceCategory>
    <PreferenceScreen android:title="Console (template)"
        android:key="console">
        <EditTextPreference android:title="@string/prefs_console_host"
            android:summary="@string/prefs_not_set" android:key="host"></EditTextPreference>
        <CheckBoxPreference android:title="@string/prefs_console_auth"
            android:summary="@string/prefs_console_auth_summary" android:key="auth"></CheckBoxPreference>
        <EditTextPreference android:shouldDisableView="true"
            android:title="@string/prefs_console_authuser" android:key="authuser"
            android:dependency="auth" android:summary="@string/prefs_not_set"></EditTextPreference>
        <EditTextPreference android:title="@string/prefs_console_authpass"
            android:key="authpass" android:dependency="auth" android:summary="@string/prefs_not_set"></EditTextPreference>
        <CheckBoxPreference android:title="@string/prefs_console_pair"
            android:summary="@string/prefs_console_pair_summary" android:key="pair"></CheckBoxPreference>
    </PreferenceScreen>
</PreferenceScreen>

Я хочу, чтобы записи в list были динамическими и отображалиconsole предпочтений под каждым.

Все остальные идеи приветствуются.

Спасибо

1 Ответ

0 голосов
/ 14 мая 2013

Вы пытались динамически включать файлы XML в основной файл, используемый для предпочтений?

Эта техника подробно описана в этих 2 статьях:

http://www.aslingandastone.com/2010/dynamically-changing-android-views/

http://android -developers.blogspot.com / 2009/02 / андроид-топологии фокусы-2-повторное использование-layouts.html

Они объясняют, как делать то, о чем вы просили в своем пункте 3:

Вложенные, завышенные PreferenceScreens

В основном идея заключается в том, чтобы использовать этот простой тег для включения другого XML-файла в существующий:

<include
    android:id="@+id/layout_to_nest"
    layout="@layout/layout_to_nest" />

Не знаю, пытались ли вы это сделать, но если нет, похоже, стоит попробовать!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...