Куда я помещаю restate () после изменения темы с помощью настроек? - PullRequest
0 голосов
/ 22 октября 2018

Я пытался добавить темный режим в свое приложение и в основном использовал этот сайт ( Tutorial ), чтобы узнать, как его реализовать.Все работает, кроме темы, не меняется, пока я не перезапущу приложение.После некоторых исследований я обнаружил, что пересоздание () было бы правильным способом решения этой проблемы, но я не знаю, где его реализовать.

В настоящее время мой метод 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 голосов
/ 22 октября 2018

Если вы меняете тему с SettingFragment, тогда звоните getActivity().recreate() с SettingFragment.

...