我使用SettingsActivity作为我的应用程序的首选项活动,如下所示:
public class SettingsActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (PreferenceManager.getDefaultSharedPreferences(this).getBoolean(getString(R.string.dark_theme_key), false)) {
setTheme(R.style.AppThemeDark);
} else {
setTheme(R.style.AppThemeLight);
}
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.replace(android.R.id.content, new SettingsFragment())
.commit();
}
}
public static class SettingsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.app_preferences);
...
}
}
}
如果我使用getActivity().recreate();
(我有一个SwitchPreference用于黑暗和浅色主题。黑暗主题是Theme.AppCompat,光是相同但是.Light。如果我更改主题我使用重新创建。)或更改方向屏幕上的结果(当然是因为创造了),当我在我的轻主题上时,我遇到了一个奇怪的问题。
问题如下 - 在重新创建之后,EditTextPreference的文本内容变为白色而不是黑色。
如果我只是忽略savedInstanceState == null
并且每次在SettingsActivity.onCreate上创建一个新片段,我就会失去"屏幕状态" (例如,如果我之前一直向下滚动,在重新创建之后我会滚动回到顶部。如果我之前打开了EditTextPreference,则在重新创建其关闭之后)。
我不确定如何在娱乐时恢复片段屏幕状态,或者为什么我的问题甚至会发生。非常感谢帮助。