gpt4 book ai didi

java - 重新启动应用程序时 SharedPreferences 不保存 boolean 值

转载 作者:行者123 更新时间:2023-11-30 01:41:50 26 4
gpt4 key购买 nike

我正在开发一个在 DarkMode 主题中使用的应用程序,我将一个 Switch 用于打开和关闭 darkMode,并将其保存在一个 boolean 值中,这意味着 darkMode 为 true 或 false(boolean isDarkMode = false;)

它运行良好,我使用 SharedPreferences 保存此 true 或 false 值,以便在其他 Activity 中使用它。它有效,但是...当我关闭应用程序并再次运行应用程序时,SharedPreferences 的值不会保存,它会返回到 boolean 值的第一个值(谢谢你)

SettingActivity.java(设置 boolean 值 true 或 false)

package com.kurdfoxx.nightmodewithsharedprefrense;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.app.AppCompatDelegate;

import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.Switch;
import android.widget.Toast;

public class SettingActivity extends AppCompatActivity {
Switch mySwitch;
boolean isDarkMode =false;
private static final String DARKMODE = "login";

@Override
protected void onCreate(Bundle savedInstanceState) {
myboolian();
if (AppCompatDelegate.getDefaultNightMode() == AppCompatDelegate.MODE_NIGHT_YES) {
setTheme(R.style.darkTheme);
isDarkMode =true;

} else {
setTheme(R.style.AppTheme);
isDarkMode =false;


}
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_setting);
Toast.makeText(this, ""+ isDarkMode, Toast.LENGTH_SHORT).show();
mySwitch = findViewById(R.id.switch1);
if (AppCompatDelegate.getDefaultNightMode() == AppCompatDelegate.MODE_NIGHT_YES) {
mySwitch.setChecked(true);
}
mySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
isDarkMode =true;
restartApp();
} else {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
isDarkMode =false;

restartApp();

}
}
});


Button buttonGoMain=findViewById(R.id.btn_go_MainAct);
buttonGoMain.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(SettingActivity.this,MainActivity.class));

}
});


}

public void restartApp() {
Intent intentRestartApp = new Intent(getApplicationContext(), SettingActivity.class);
startActivity(intentRestartApp);
finish();

}
public void myboolian(){
isDarkMode =!isDarkMode; //change isDarkMode from false to true by this
SharedPreferences sharedPreferences =getSharedPreferences(DARKMODE,MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean("ISDARKMODE", isDarkMode);
editor.apply();


}


}

和MainActivity.java

package com.kurdfoxx.nightmodewithsharedprefrense;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.app.AppCompatDelegate;

import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
private static final String DARKMODE = "login";
boolean isDarkMode = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
getData();
if (isDarkMode){

if (AppCompatDelegate.getDefaultNightMode() == AppCompatDelegate.MODE_NIGHT_YES) {
setTheme(R.style.darkTheme);
isDarkMode =true;
} else {
setTheme(R.style.AppTheme);
isDarkMode =false;

}
}
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button=findViewById(R.id.button_go_to_setting_activity);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this,SettingActivity.class));
}
});

}
private void getData() {

SharedPreferences sharedPreferences = getSharedPreferences(DARKMODE, MODE_PRIVATE);
isDarkMode = sharedPreferences.getBoolean("ISDARKMODE", false);

}

}

最佳答案

在 checkChangedListener 中,将 darkMode 分别设置为 truefalse

在您的 myboolian 方法中,这是您写入变量的唯一位置。

此方法从您的onCreate调用,而不是在其他地方调用。除此之外,此方法始终设置 darkMode = !darkMode,交换值。

您必须在 onCheckedChanged 中调用 myboolian 并删除 darkMode = !darkMode,否则您将始终重置为之前的值。

关于java - 重新启动应用程序时 SharedPreferences 不保存 boolean 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59666198/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com