使用首选项更改主题后,应将recreate()放在哪里?

时间:2018-10-22 04:35:51

标签: android android-fragments android-activity android-theme recreate

我一直在尝试向应用程序添加暗模式,并且主要是在使用此网站(Tutorial)来学习如何实现它。除非我重新启动应用程序,否则除主题之外的所有其他功能都不会更改。经过一些研究,我发现recreate()是解决此问题的正确方法,但我不知道在哪里实现。

当前,我在主要活动中的oncreate方法如下:

PreferenceManager.setDefaultValues(this, R.xml.settings_pref, false);
    SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
    Boolean contrastPref = sharedPref.getBoolean (Navigation.KEY_PREF_CONTRAST_SWITCH, false);
    setTheme(contrastPref? R.style.AppTheme_Dark : R.style.AppTheme);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_navigation);........

在oncreate方法下面

public static final String
        KEY_PREF_CONTRAST_SWITCH = "contrast_switch";

保存首选项开关的片段如下所示:

public  class SettingsFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
    setPreferencesFromResource(R.xml.settings_pref, rootKey);
}}

感谢您的帮助:)

1 个答案:

答案 0 :(得分:0)

如果您要从SettingFragment更改主题,请从getActivity().recreate()调用SettingFragment