Android上的动态首选项下的嵌套PreferenceScreens

Dea*_*nna 9 android preferences

我正在尝试使用动态的条目列表创建首选项屏幕,当单击每个条目时,我有另一个首选项屏幕.例如,考虑一个邮件帐户列表,每个帐户都有可用的帐户设置.

虽然我可以创建我想要使用的嵌套PreferenceScreens,但是这不能轻易地缩放到多个条目而不在每个代码中创建子偏好结构.

我在Android UI中看到了几种不同的变体.

是否有建议的方式来创建这样的结构?

Possibilites包括:

  1. 独立的,独立的活动
    在我看来工作但是很混乱

  2. 嵌套,代码创建PreferenceScreens
    维护中的痛苦,这意味着首选项不再存储为XML片段

  3. 嵌套,膨胀的PreferenceScreens
    我找不到将另一个XML文件扩展到子树的方法

  4. 使用setPreferenceScreen()为每一个显示的一个"子"PreferenceScreen
    我找不到隐藏"模板"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>
Run Code Online (Sandbox Code Playgroud)

我希望下面的条目list是动态的,并console在每个条目下显示首选项.

欢迎所有其他想法.

谢谢

Yoa*_*uet 0

您是否尝试过将动态 XML 文件包含到用于首选项的主文件中?

此技术在这两篇文章中有详细介绍:

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

http://android-developers.blogspot.com/2009/02/android-layout-tricks-2-reusing-layouts.html

他们解释了如何执行您在第 3 点中提出的要求:

嵌套、膨胀的 PreferenceScreen

基本上,这个想法是使用这个简单的标签将另一个 XML 文件包含到现有文件中:

<include
    android:id="@+id/layout_to_nest"
    layout="@layout/layout_to_nest" />
Run Code Online (Sandbox Code Playgroud)

我不知道你是否尝试过,但如果没有,似乎值得一试!