我有一个片段,它启动了一个活动,其中我有各种复选框(Checkbox1,checkbox2等)。 我需要保持状态勾选/未记录保存,即使我返回到片段后又重新开始活动。
我试过这段代码,但它没有用
final CheckBox checkBox5 = (CheckBox) findViewById(R.id.checkBox2);
checkBox5.setChecked(false);
checkBox5.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (checkBox5.isChecked()) {
buttonSound.start();
} else {
buttonSound.start();
}
SharedPreferences pref5 = PreferenceManager.getDefaultSharedPreferences(.this); SharedPreferences.Editor editor5 = pref5.edit();
editor5.putBoolean("checkbox", checkBox5.isChecked());
editor5.commit();
if (pref5.getBoolean("checkbox", false) == true){
checkBox5.setChecked(true);
} else{
checkBox5.setChecked(false);
}
}
});
任何人都可以告诉我我做错了什么吗?
活动在清单中声明,我只是想从这个活动回到片段,然后从片段转到此活动,发现这些复选框已标记!
答案 0 :(得分:2)
检查是否实际检查了怎么办?:
if (checkBox5.isChecked()) {
SharedPreferences pref5 = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor editor5 = pref5.edit();
editor5.putBoolean("checkbox", checkBox5.isChecked());
editor5.commit();
} else {
// Remove the SharedPreferences here if false
}
如果你通过editor5.putBoolean("checkbox", checkBox5.isChecked());
并且没有检查它(因为不是......目前是假的),你将总是得到 FALSE 。
编辑:另外,请...检查onCreate / onCreateView / onResume上的布尔型SharedPreference状态或setOnCheckedChangeListener
之外的任何其他位置。