具有多个没有标题的PreferenceScreen的PreferenceActivity

Cha*_*aoz 1 android preferenceactivity preferencescreen preferencefragment

我想做一个普通的PreferenceActivity(旧样式,没有标题),但是使用片段而不使用addPreferencesFromResource(id)(因为弃用).
现在我把它放在我的onCreate:

getFragmentManager().beginTransaction().replace(android.R.id.content, new PreferencesFragment()).commit();
Run Code Online (Sandbox Code Playgroud)

我PreferencesFragment看起来像这样:

public static class PreferencesFragment extends PreferenceFragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);
    }
}
Run Code Online (Sandbox Code Playgroud)

显然我也实现了这个isValidFragment方法:

@Override
protected boolean isValidFragment(String fragmentName) {
    return PreferencesFragment.class.getName().equals(fragmentName)
            || InnerFragment.class.getName().equals(fragmentName);
}
Run Code Online (Sandbox Code Playgroud)

它工作得很好.然而,当PreferenceScreen我在我的内心时有一个问题preferences.xml:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <!--  ...  -->
    <PreferenceScreen android:fragment="net.chaozspike.batterynotifier.SettingsActivity$InnerFragment"
        android:summary="@string/settings_activity_prefs_display_night_mode_sum"
        android:title="@string/settings_activity_prefs_display_night_mode" />
    <!--  ...  -->
</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)

我有以下问题:新的首选项屏幕显示在正常的屏幕之上,我知道这可能是因为我更换了默认设置R.id.content.截图:

截图不是loding

但是我想在不使用已弃用的东西或标题的情况下解决此问题.这有可能实现吗?

Far*_*sbi 6

只需使用PreferenceActivity.EXTRA_SHOW_FRAGMENT和PreferenceActivity.EXTRA_NO_HEADERS只显示一个片段并跳过标题:

//Note #1: ExtendedPreferenceActivity extends PreferenceActivity 
//Note #2: ExtendedPreferenceFragment extends PreferenceFragment and is 
//declared as an inner static class in ExtendedPreferenceActivity
Intent intent = new Intent(context, ExtendedPreferenceActivity.class );
intent.putExtra(PreferenceActivity.EXTRA_SHOW_FRAGMENT, ExtendedPreferenceActivity.ExtendedPreferenceFragment.class.getName() );
intent.putExtra(PreferenceActivity.EXTRA_NO_HEADERS, true );
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)