【发布时间】:2019-12-05 08:52:17
【问题描述】:
我在我的 android 项目中使用了灯光/夜间模式,并在片段中使用了一个开关来更改模式。好吧,当我重新加载应用程序时它会改变。但我想在不重新加载应用程序的情况下更改模式。我该怎么做???
-
我想在更改模式时保留当前片段。
aSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean b) { if(b){ AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES); aSwitch.setChecked(true); sh = getActivity().getSharedPreferences("darklight",Context.MODE_PRIVATE).edit(); sh.putBoolean("is",true); sh.commit(); }else{ AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO); sh = getActivity().getSharedPreferences("darklight",Context.MODE_PRIVATE).edit(); sh.putBoolean("is",false); sh.commit(); } } });
【问题讨论】:
-
您不必重新启动应用程序,但您必须重新启动该活动和片段,并为用户提供无缝的流程,您必须正确保存和恢复状态。 reddit.com/r/androiddev/comments/9i8eo7/…
-
@NIKHILMAURYA 我想在更改模式时留在当前片段中。
-
这就是保存当前状态部分的地方。基本上,您托管此片段的活动将被重新加载,此时您必须保存此信息,在重新加载完成后您将获取有关附加到它的片段的 savedInstanceState 数据并再次尝试设置。
-
通过重新加载片段可以实现。您需要通过它的 OncreateView 才能在 setTheme 中提供新的更改。你可以通过stackoverflow.com/questions/20357557/…重新加载
-
如果您在重新加载片段时遇到问题,那么简单的解决方案是重新启动包含该片段的活动,在 onCreate 调用此片段时,您需要使用标志(布尔值)来管理它,它的值在onCheckedChanged。
标签: android