尝试使用片段保存夜间模式状态
Posted
技术标签:
【中文标题】尝试使用片段保存夜间模式状态【英文标题】:Trying to save Night Mode State using Fragment 【发布时间】:2021-11-30 18:19:00 【问题描述】:我正在尝试在我的应用程序中启用暗夜模式,但当我重新启动应用程序时,它会再次进入光模式,基本上我想保存暗夜模式状态,所以当重新启动应用程序时,它会一直处于暗模式设置为深色模式,而不是浅色模式。我的相关代码如下:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
// Inflate the layout for this fragment
View view= inflater.inflate(R.layout.fragment_settings, container, false);
switchCompat= view.findViewById(R.id.switchCompat);
sharedPreferences = getActivity().getSharedPreferences("night",0);
Boolean booleanValue= sharedPreferences.getBoolean("night_mode",true);
if(booleanValue)
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
switchCompat.setChecked(true);
switchCompat.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
if(isChecked)
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
switchCompat.setChecked(true);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean("night_mode",true);
editor.commit();
else
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
switchCompat.setChecked(false);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean("night_mode",false);
editor.commit();
);
return view;
我也尝试过这个活动,但它没有保存暗模式的状态。
【问题讨论】:
【参考方案1】:创建一个名为 Preferences Manager 的类
将此代码粘贴到类中
?
public final SharedPreferences sharedPreferences;
public PreferenceManager(Context context)
sharedPreferences=context.getSharedPreferences( "PREFS",Context.MODE_PRIVATE );
public void putBoolean(String key,Boolean value)
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean( key,value );
editor.apply();
public Boolean getBoolean (String key,Boolean defaultValue)
return sharedPreferences.getBoolean( key,defaultValue );
public void clear()
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.clear();
editor.apply();
然后在片段中创建一个像这样名为首选项管理器的对象。
PreferencesManager preferencesManager = new PreferencesManager(getActivity());
然后像这样为它添加价值
如果夜间模式设置为开启。
preferencesManager.putBoolean("NightMode",true);
如果夜间模式关闭
preferencesManager.putBoolean("NightMode",false);
然后检查夜间模式是打开还是关闭,请使用此代码
if (preferencesManager.getBoolean("NightMode"))
//night mode is on ,do some magic
else
//night mode is off ,do some magic
【讨论】:
以上是关于尝试使用片段保存夜间模式状态的主要内容,如果未能解决你的问题,请参考以下文章