android – 如何在细节PreferenceFragment中加载相同的屏幕首选项

我正在尝试做类似 Android平板电脑中的设置首选项.

当我单击“更多”时,“无线和网络”首选项屏幕显示在右侧片段上,而不是触摸“VPN”,在同一片段中打开“VPN”首选项屏幕.

我怎样才能做到这一点 ?

这是我的偏好xml

<PreferenceScreen android:title="Title A">
        <PreferenceScreen android:title="TITLE B">
            <PreferenceCategory
                android:title="category">
                <ListPreference android:key="list"
                    android:title="list" android:entries="@array/list_vals"
                    android:entryValues="@array/list_vals1"
                    android:defaultValue="1" android:dialogTitle="list title"
                    android:negativeButtonText="cancel" />
            </PreferenceCategory>
        </PreferenceScreen>
</PreferenceScreen>

问题是我不希望在整个屏幕上加载带有标题B的嵌套首选项屏幕我只想加载到正确的片段…

注意:到目前为止,我使用此文档创建了我的示例http://developer.android.com/guide/topics/ui/settings.html#PreferenceHeaders

编辑*

这是我的活动

public class SettingsActivity extends PreferenceActivity {
    @Override
    public void onBuildHeaders(List<Header> target) {
        loadHeadersFromresource(R.xml.preference_headers,target);
    }
}

我没有布局,所以我怎么知道我的主片段ID是什么,我的细节片段ID是什么?

解决方法

简短示例,定义PreferenceActivity,并为主要类别提供头文件

类设置活动:

public class SettingsActivity extends PreferenceActivity {
    @Override
    public void onBuildHeaders(List<Header> target) {
        super.onBuildHeaders(target);
        loadHeadersFromresource(R.xml.headers,target);
    }
}

文件/res/xml/headers.xml:

<?xml version="1.0" encoding="utf-8"?>

<preference-headers xmlns:android="http://schemas.android.com/apk/res/android">
    <header android:title="Preference Header"
        android:fragment="com.example.SettingsDemo.PrefFragment"/>
</preference-headers>

创建一个在上面的android:fragment中引用的PreferenceFragment,提供自己的首选项文件

class PrefFragment:

public class PrefFragment extends PreferenceFragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromresource(R.xml.prefs);
    }
}

文件/res/xml/prefs.xml:

<?xml version="1.0" encoding="utf-8"?>

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
 <PreferenceCategory android:title="Preferences">
 <SwitchPreference android:title="Preference" />
    <PreferenceScreen android:title="Sub Preferences"
        android:fragment="com.example.SettingsDemo.SubPrefFragment"/>
 </PreferenceCategory>
</PreferenceScreen>

在上面的android:fragment中引用创建一个子PreferenceFragment,也提供自己的首选项文件

SubPrefFragment类:

public class SubPrefFragment extends PreferenceFragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromresource(R.xml.sub_prefs);
    }
}

文件/res/xml/sub_prefs.xml:

<?xml version="1.0" encoding="utf-8"?>

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory android:title="Sub Preferences">
        <CheckBoxPreference android:title="Sub Preference"/>
    </PreferenceCategory>
</PreferenceScreen>

而已. PreferenceActivity将自动显示所有子片段.

结果:

主要偏好片段:

替换为子PreferenceFragment,在相同的标题下:

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...