我正在尝试做类似
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,在相同的标题下: