从XML中的另一个首选项屏幕引用单独的Android首选项屏幕

Tim*_*Tim 9 xml android reference preferencescreen

我在我的Android应用程序中用XML定义了两个Android首选项屏幕.

例如,屏幕1

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:key="screen1">
    <PreferenceCategory android:title="Preferences">
        <CheckBoxPreference 
            android:defaultValue="true"
            android:title="test"
            android:key="test_pref"/>
    </PreferenceCategory>
</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)

和屏幕2

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:key="screen2">
    <CheckBoxPreference 
        android:key="checkbox" 
        android:title="Checkbox">
    </CheckBoxPreference>
</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)

我希望屏幕2是一个单独的屏幕,可以自己访问,但我也希望它的首选项也是屏幕的一部分.有一种简单的方法可以简单地从屏幕1中引用屏幕2吗?或者我只需要在屏幕1的子偏好屏幕中重复相同的偏好内容.

Tom*_*che 13

我没有找到直接在XML中"合并"两个文件的方法,但您可以尝试使用Java合并它们:

@Override
public void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    getPreferenceManager().setSharedPreferencesName(Settings.PREFERENCES_NAME);
    getPreferenceManager().setSharedPreferencesMode(Context.MODE_WORLD_READABLE);

    // add the first xml
    addPreferencesFromResource(R.xml.preferences_settings);
    // add another xml
    addPreferencesFromResource(R.xml.preferences_mail_settings);

    // do the things, that need to be done...
}
Run Code Online (Sandbox Code Playgroud)

祝好运

汤姆


Pat*_*ick 7

您可以使用Intent在XML中执行此操作:

<PreferenceScreen android:key="screen1">
  <PreferenceScreen android:key="screen2">
    <intent android:action="com.example.PREFERENCE_2" />
  </PreferenceScreen>
</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)

AndroidManifest.xml中:

<activity android:name="com.example.Preference2Activity">
  <intent-filter>
    <category android:name="android.intent.category.DEFAULT" />
    <action android:name="com.example.PREFERENCE_2" />
  </intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)