我在StackOverflow上经历了很多问题,但无法使这段代码正常工作。创建活动时始终会选中该复选框。
我的代码:
@Override
public void onStart() {
super.onStart();
chb1.setChecked(load1());
}
@Override
public void onPause() {
super.onPause();
save1(chb1.isChecked());
}
@Override
public void onResume() {
super.onResume();
chb1.setChecked(load1());
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_screen_lock);
chb1 = (CheckBox) findViewById(R.id.checkBox2);
chb1.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(chb1.isChecked())
{
SharedPreferences sharedPreferences1 = getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences1.edit();
editor.putBoolean("checked", true);
editor.commit();
}
private boolean load1() {
SharedPreferences sharedPreferences1 = getPreferences(Context.MODE_PRIVATE);
return sharedPreferences1.getBoolean("checked", false);
}
private void save1(final boolean isChecked) {
SharedPreferences sharedPreferences1 = getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences1.edit();
editor.putBoolean("checked", true);
editor.commit();
}
我怎样才能做到这一点?任何帮助表示赞赏。
答案 0 :(得分:2)
你可以这样做:
通过 SharedPreference保存 CheckBox 的状态:
CheckBox的onClick :
SharedPreferences sharedPreferences1 = getSharedPreferences("sp_title", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences1.edit();
editor.putBoolean("checked", chb1.isChecked());
editor.commit();
CheckBox 现在获取 状态:
on onCreate():
SharedPreferences sharedPreferences1 = getSharedPreferences("sp_title", Activity.MODE_PRIVATE);
boolean isChecked = sharedPreferences1.getBoolean("checked", false);
复选框现在设置 状态:
chb1.setChecked(isChecked);
希望它会对你有所帮助。
答案 1 :(得分:1)
你不需要onStart,因为无论如何它都会运行onResume。
另一点是你在复选框上设置了监听器,只有在选中复选框时才会保存,因此它永远不会设置为false,这就是打开活动时始终检查复选框的原因。
这是一个固定版本,我希望它的工作。 :)
@Override
public void onPause() {
super.onPause();
save1(chb1.isChecked());
}
@Override
public void onResume() {
super.onResume();
setCheckBoxFromSave();
}
private void setCheckBoxFromSave() {
bool loadedChecked = load1();
if (chb1.isChecked() != loadedChecked) {
chb1.setChecked(loadedChecked);
}
}
private static final String KEY_CHECKED_SAVE = "checked";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_screen_lock);
chb1 = (CheckBox) findViewById(R.id.checkBox2);
setCheckBoxFromSave();
chb1.setOncheckListener(new CheckBox.OnCheckListener() {
@Override
public void onCheck(boolean check) {
save1(check);
}
});
}
private SharedPreferences getSharedPreferences() {
return PreferenceManager.getDefaultSharedPreferences(this);
}
private boolean load1() {
return getSharedPreferences().getBoolean(KEY_CHECKED_SAVE, false);
}
private void save1(final boolean isChecked) {
SharedPreferences.Editor editor = getSharedPreferences().edit();
editor.putBoolean(KEY_CHECKED_SAVE, true);
editor.apply();
}