Android 更改不会应用于所有活动

Android 更改不会应用于所有活动,android,android-activity,taskstackbuilder,android-night-mode,Android,Android Activity,Taskstackbuilder,Android Night Mode,我在我的应用程序中实现了夜间模式。用户可以在配置文件活动中更改夜间模式设置。活动顺序如下 选项卡活动>>显示活动,配置文件活动 更改的设置仅应用于当前活动(即配置文件活动)。如果用户按“后退”按钮,则更改不会应用于该活动。有人帮助我将更改应用于所有活动吗?当我们关闭应用程序并再次打开时,会应用更改。但“后退”按钮不起作用 这是我正在使用的代码 @Override protected void onCreate(Bundle savedInstanceState) { final Sha

我在我的应用程序中实现了夜间模式。用户可以在配置文件活动中更改夜间模式设置。活动顺序如下

选项卡活动>>显示活动,配置文件活动

更改的设置仅应用于当前活动(即配置文件活动)。如果用户按“后退”按钮,则更改不会应用于该活动。有人帮助我将更改应用于所有活动吗?当我们关闭应用程序并再次打开时,会应用更改。但“后退”按钮不起作用

这是我正在使用的代码

 @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());

            }
        }
    });

}

因为您不考虑Android生命周期。您可以在创建时配置
中的所有内容。但是,在活动之间切换时,当前活动的生命周期也会相应地发生变化。生命周期解释得很好

解决方案:

当您返回到上一个活动时,将调用
onResume。您应该在此方法中应用所有更改

override fun onResume() {
   super.onResume()

   //Read your settings from SharedPrefs then apply, here
}

“我认为最好的做法是每次主题更改时重新启动/重置应用程序”

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(); 

所以,没有必要在onCreate中应用更改?是的,没错,由于此方法是有争议的,请始终调用。请您解释代码的第一行。我不明白。什么是MyApp和A。我的意思是在我的案例中我应该写什么。我正在更新配置文件活动我应用了您的代码。但当我按“上一步”按钮时,不会应用更改。如果我再次关闭并打开应用程序,然后这些更改被应用于内容i=getBaseContext().getPackageManager().getLaunchIntentForPackage(getBaseContext().getPackageName());i、 添加标志(意图、标志、活动、清除、顶部);i、 setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);星触觉(i);完成();尝试此操作我需要在我正在进行更改的活动中编写此代码?您需要在更改主题的clicklistener中编写此代码