Изменения не распространяются на все виды деятельности - PullRequest
0 голосов
/ 10 июня 2019

Я реализовал ночной режим в своем приложении. Пользователь может изменить настройки ночного режима в активности профиля.

TabbedActivity >> DisplayActivity, ProfileActivity

ИзмененоНастройки применяются только в текущей активности. (т. е. в профиле). Если пользователь нажимает кнопку «Назад», изменения не применяются к этим действиям. Никто не помогает мне применить изменения ко всем активам. Когда мы закрываем приложение и открываем снова. Измененияприменяются назад.

Это код, который я использую.

 @Override
protected void onCreate(Bundle savedInstanceState) {
    final SharedPreferences sharedPreferences = 
getSharedPreferences("NIGHT_MODE", MODE_PRIVATE);
    int result=sharedPreferences.getInt("NIGHT_MODE_OPTION",0);

    if (result==2){
        setTheme(R.style.darkTheme);
    }else setTheme(R.style.AppTheme);
    loadLocale();
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_profile);
final SharedPreferences.Editor editor = getSharedPreferences("NIGHT_MODE", MODE_PRIVATE).edit();



    if (result==2){
        night.setChecked(true);
    }
    night.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked){
                AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
                editor.putInt("NIGHT_MODE_OPTION",AppCompatDelegate.MODE_NIGHT_YES);
                editor.apply();
                startActivity(getIntent());
            }else {
                AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
                editor.putInt("NIGHT_MODE_OPTION",AppCompatDelegate.MODE_NIGHT_NO);
                editor.apply();
               startActivity(getIntent());

            }
        }
    });

}

Ответы [ 2 ]

0 голосов
/ 10 июня 2019

«Я думаю, что лучше будет перезапускать / сбрасывать приложение при каждом изменении темы»

Intent i = getBaseContext().getPackageManager().getLaunchIntentForPackage( 
getBaseContext().getPackageName() );
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
startActivity(i); finish(); 
0 голосов
/ 10 июня 2019

Поскольку вы не , учитывая жизненный цикл Android. Вы настраиваете все внутри onCreate. Однако при переключении между действиями жизненный цикл текущей деятельности изменяется соответственно. Здесь - жизненный цикл объясняется очень хорошо

Решение:

Когда вы возвращаетесь к предыдущему занятию, вызывается onResume. Вы должны применить все изменения внутри этого метода

override fun onResume() {
   super.onResume()

   //Read your settings from SharedPrefs then apply, here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...