我正在尝试在SharedPreferences中保存交换机的状态,但是我在执行此操作时遇到了问题。我有一个开关用于打开和关闭音频。
public void audio() {
audio.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
if (isChecked) {
player= MediaPlayer.create(legoActivity.this, R.raw.sound);
player.start();
SharedPreferences sharedPreferences = getSharedPreferences("prefss", MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean("audio", isChecked);
editor.apply();
editor.commit();
}
...
}
...
});
...
}
在活动结束时,我使用oncCreate
方法:
SharedPreferences prefs = getSharedPreferences("prefss", MODE_PRIVATE);
prefs.getBoolean("audio", true);
两个代码段都来自同一个活动。
答案 0 :(得分:1)
选中此复选框后,您只更新共享首选项,因此您只存储true。 只需从OnCheckedChanged
中删除if@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
player = MediaPlayer.create(legoActivity.this, R.raw.sound);
player.start();
SharedPreferences sharedPreferences = getSharedPreferences("prefss", MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean("audio", isChecked);
editor.apply();
editor.commit();
}
答案 1 :(得分:0)
您是否尝试在onCreate()上恢复布尔值,然后在此之后设置开关?
SharedPreferences prefs = getSharedPreferences("prefss", MODE_PRIVATE);
audio.setChecked(prefs.getBoolean("audio", true));