简体   繁体   中英

Can not save the state of CheckBox in Android

I am developing an application. There are many checkbox in one page. I want to save the state of CheckBox when I exit page. I use SharedPreferrences to save. The code is like this:

checkbox1.setOnCheckedChangeListener(new OnCheckedChangeListener(){
    public void onCheckedChanged(CompoundButton arg0, boolean isChecked) {
// TODO Auto-generated method stub
Editor editor = getSharedPreferences("syllabus", 0).edit();
editor.putBoolean("cbx1_ischecked", isChecked);
editor.commit();
}
    });
checkbox2.setOnCheckedChangeListener(new OnCheckedChangeListener(){
    public void onCheckedChanged(CompoundButton arg0, boolean isChecked) {
    // TODO Auto-generated method stub
    Editor editor = getSharedPreferences("syllabus", 0).edit();
    editor.putBoolean("cbx2_ischecked", isChecked);
    editor.commit();
    }

});

When I leave this page, and back again. All the checkbox state becomes not selected as default. why?

You are saving vallues but you have to restore them you your activity is started like this :

SharedPreferences prefs = getSharedPreferences("syllabus", 0);
checkbox1.setChecked(prefs.getBoolean("cbx1_ischecked" ,false));
checkbox2.setChecked(prefs.getBoolean("cbx2_ischecked" ,false));

try this

 boolean check1,check2;
 checkbox1.setOnCheckedChangeListener(new OnCheckedChangeListener(){
 public void onCheckedChanged(CompoundButton arg0, boolean isChecked) {
 // TODO Auto-generated method stub
  check1=isChecked;

 }
});

checkbox2.setOnCheckedChangeListener(new OnCheckedChangeListener(){
public void onCheckedChanged(CompoundButton arg0, boolean isChecked) {
// TODO Auto-generated method stub
 check2=isChecked;

}

}); 

//store boolean only once when you leave the activity
 Editor editor = getSharedPreferences("syllabus", 0).edit();
 editor.putBoolean("cbx1_ischecked", check1);
 editor.putBoolean("cbx2_ischecked", check2);
 editor.commit();


 In onCreate()

  SharedPreferences prefs = getSharedPreferences("syllabus", 0);
  checkbox1.setChecked(prefs.getBoolean("cbx1_ischecked" ,false));
  checkbox2.setChecked(prefs.getBoolean("cbx2_ischecked" ,false));

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM