[英]Switch button doesnt work with SharedPreferences
我在我的应用程序中使用开关按钮来打开/关闭音乐。 我正在使用 SharedPreferences 来保存我的开关按钮的最后一个 state。 但是,当我将 go 退出我的应用程序并再次运行时,它始终默认“关闭”state。 我想一直保存用户选择的 state,即使他们关闭并再次运行应用程序也是如此。 这是我的代码`public class SettingsView extends AppCompatActivity {
private Switch musicSwitch;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
musicSwitch = findViewById(R.id.sLLmusicSwitch);
SharedPreferences sharedPrefs = getSharedPreferences("save", MODE_PRIVATE);
musicSwitch.setChecked(sharedPrefs.getBoolean("value", true));
switchCheckListener();
}
private void switchCheckListener() {
musicSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (musicSwitch.isChecked()) {
// saving state of the switch button
SharedPreferences.Editor editor = getSharedPreferences("save", MODE_PRIVATE).edit();
editor.putBoolean("NameOfThingToSave", true);
editor.apply();
musicSwitch.setChecked(true);
// turn on music
Repository.getInstance().startMusic();
Toast.makeText(getApplicationContext(), "Music on", Toast.LENGTH_SHORT).show();
} else {
// saving state of the switch button
SharedPreferences.Editor editor = getSharedPreferences("save", MODE_PRIVATE).edit();
editor.putBoolean("NameOfThingToSave", false);
editor.apply();
musicSwitch.setChecked(false);
//turn off music
Repository.getInstance().pauseMusic();
Toast.makeText(getApplicationContext(), "Music off", Toast.LENGTH_SHORT).show();
}
}
});
}
}
`
您正在将 boolean state 保存到他们键NameOfThingToSave
下的共享首选项中,并在 onCreate 上使用value
检索它。
在 onCreate 中适当地设置键值:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
musicSwitch = findViewById(R.id.sLLmusicSwitch);
SharedPreferences sharedpreferences = getSharedPreferences("save",
Context.MODE_PRIVATE);
switchCheckListener();
musicSwitch.setChecked(sharedpreferences.getBoolean("NameOfThingToSave", false));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.