2014-09-26 144 views
-1

我正在使用sharedpreferences开发任务列表应用程序。但它不保存复选框状态。我想在用户点击复选框时保存。用户退出应用程序并再次查看它已经更新状态。如何保存复选框状态? 这里是我的代码(已经被固定,工作)SharedPreferences不保存复选框状态

public class TaskList extends Activity { 
    CheckBox cb1, cb2, cb3, cb4; 
    Boolean checked = false; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     setContentView(R.layout.activity_tasks); 
     super.onCreate(savedInstanceState); 
     findID(); 

     cb1 = (CheckBox) findViewById(R.id.checkBox1); 
     boolean isChecked = getBooleanFromPreferences("isChecked"); 
     Log.i("start", "" + isChecked); 
     cb1.setChecked(isChecked); 
     cb1.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton view, boolean isChecked) { 
       Log.i("boolean", "" + isChecked); 
       putBooleanInPreferences(isChecked,"isChecked"); 

      } 
     }); 
    } 

    public void putBooleanInPreferences(boolean isChecked, String key) { 
     SharedPreferences sharedPreferences = this 
       .getPreferences(Activity.MODE_PRIVATE); 
     SharedPreferences.Editor editor = sharedPreferences.edit(); 
     editor.putBoolean(key, isChecked); 
     editor.commit(); 
    } 

    private boolean getBooleanFromPreferences(String key) { 
     SharedPreferences sharedPreferences = this 
       .getPreferences(Activity.MODE_PRIVATE); 
     Boolean isChecked = sharedPreferences.getBoolean(key, false); 
     return isChecked; 
    } 

    private void findID() { 
     cb1 = (CheckBox) findViewById(R.id.checkBox1); 
     cb2 = (CheckBox) findViewById(R.id.checkBox2); 
     cb3 = (CheckBox) findViewById(R.id.checkBox3); 
     cb4 = (CheckBox) findViewById(R.id.checkBox4); 
    } 

} 
+0

我明白你只想要实现这个行为CB1 – zozelfelfo 2014-09-26 09:59:05

+1

这是为什么保存PREF注释掉为什么它引用的未知类'Settings'行? – wvdz 2014-09-26 10:00:08

+0

是的,我只想为cb1 – bee 2014-09-26 10:00:17

回答

3

您需要SharedPreferencesevery时间更新值CheckBox检查状态改变。 删除该评论者的评论Settings.this.putBooleanInPreferences(isChecked,"isChecked") in setOnCheckedChangeListener

所以,你的听众将是如下:

cb1.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton view, boolean isChecked) { 
       Log.i("boolean", "" + isChecked); 

       putBooleanInPreferences(isChecked,"isChecked"); 
      } 
     }); 

希望这有助于。

0

试试这种方式,希望这会帮助你解决你的问题。

public class TaskList extends Activity { 

    private CheckBox cb1; 
    private CheckBox cb2; 
    private CheckBox cb3; 
    private CheckBox cb4; 
    private SharedPreferences sharedPreferences; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     setContentView(R.layout.activity_tasks); 
     super.onCreate(savedInstanceState); 
     cb1 = (CheckBox) findViewById(R.id.checkBox1); 
     cb2 = (CheckBox) findViewById(R.id.checkBox2); 
     cb3 = (CheckBox) findViewById(R.id.checkBox3); 
     cb4 = (CheckBox) findViewById(R.id.checkBox4); 

     sharedPreferences = getSharedPreferences(getString(R.string.app_name), MODE_PRIVATE); 

     cb1.setChecked(sharedPreferences.getBoolean("cb1",false)); 
     cb2.setChecked(sharedPreferences.getBoolean("cb2",false)); 
     cb3.setChecked(sharedPreferences.getBoolean("cb3",false)); 
     cb4.setChecked(sharedPreferences.getBoolean("cb4",false)); 
     cb1.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton view, boolean isChecked) { 
       SharedPreferences.Editor editor = sharedPreferences.edit(); 
       editor.putBoolean("cb1", isChecked); 
       editor.commit(); 
      } 
     }); 
     cb2.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton view, boolean isChecked) { 
       SharedPreferences.Editor editor = sharedPreferences.edit(); 
       editor.putBoolean("cb2", isChecked); 
       editor.commit(); 
      } 
     }); 
     cb3.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton view, boolean isChecked) { 
       SharedPreferences.Editor editor = sharedPreferences.edit(); 
       editor.putBoolean("cb3", isChecked); 
       editor.commit(); 
      } 
     }); 
     cb4.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton view, boolean isChecked) { 
       SharedPreferences.Editor editor = sharedPreferences.edit(); 
       editor.putBoolean("cb4", isChecked); 
       editor.commit(); 
      } 
     }); 

    } 
} 
+0

您的回答也有帮助。你只需1减迟到给予接受答案。谢谢你的帮助。 – bee 2014-09-26 10:13:22