【问题标题】:Can not save the state of CheckBox in Android无法在 Android 中保存 CheckBox 的状态
【发布时间】:2012-11-26 18:11:31
【问题描述】:

我正在开发一个应用程序。一页中有许多复选框。我想在退出页面时保存 CheckBox 的状态。我使用 SharedPreferences 来保存。代码是这样的:

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();
    }

});

当我离开这个页面,然后再回来。默认情况下,所有复选框状态都不会被选中。为什么?

【问题讨论】:

  • 你在哪里设置复选框?
  • 你如何设置来自SharedPreferences的复选框值?在你的情况下很简单。 onPause()(将值存储在 SharedPreferences 中)和 onResume()(从 SharedPreferences 中获取值)有效。
  • 使用 myPrefs = getApplicationContext().getSharedPreferences("myPrefs", MODE_WORLD_WRITEABLE); 重新打开应用时获取所有值并设置所有复选框值..

标签: android checkbox


【解决方案1】:

您正在保存值,但您必须在您的活动开始时恢复它们:

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

【讨论】:

    【解决方案2】:

    试试这个

     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));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-27
      • 1970-01-01
      • 2020-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-08
      相关资源
      最近更新 更多