1

我願做一個正常的PreferenceActivity(舊風格,無頭),但與片段,並且不使用addPreferencesFromResource(id)(因爲折舊)。
現在,我通過把這個在我onCreate實現這一點:PreferenceActivity多PreferenceScreens無頭

getFragmentManager().beginTransaction().replace(android.R.id.content, new PreferencesFragment()).commit(); 

而且我PreferencesFragment看起來是這樣的:

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

很顯然,我還實施了isValidFragment方法:

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

它工作得很好。然而,在內部具有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> 

我有以下問題:新的優先級屏幕顯示在正常的頂部,我知道這可能是因爲我更換了默認R.id.content。截圖:

screenshot not loding

但是我想不使用過時的東西或標題來解決這個問題。這有可能實現嗎?

回答

1

我自己發現瞭解決方案。如果我不打算創建基於片段的,基於標頭的SettingsActivity,但仍然不想使用已棄用的方法,那麼除了用於替換主視圖的方法外,我不得不使用片段。換句話說,我不得不刪除InnerFragment,所以我也可以刪除isValidFragment方法。我感動了其他的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> 

第一個文件(新):

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- ... --> 
    <PreferenceScreen android:summary="@string/settings_activity_prefs_display_night_mode_sum" 
     android:title="@string/settings_activity_prefs_display_night_mode" > 
     <!-- Contents of second file here> 
     <CheckBoxPreference /> etc. 
    </PreferenceScreen> 
    <!-- ... --> 
</PreferenceScreen> 
6

只需使用PreferenceActivity.EXTRA_SHOW_FRAGMENTPreferenceActivity.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);