【问题标题】:Store multiple checkbox states (enabled / disabled)存储多个复选框状态(启用/禁用)
【发布时间】:2015-04-08 00:16:31
【问题描述】:

当我选择某些复选框将启用其他复选框时,我正在制作应用程序,并且我想保留这些状态。我正在尝试使用 sharedPreferences,但它没有给我结果,我不知道为什么。有人可以帮我写代码吗?

保存状态:

private void saveContadors() {
    saved=true;
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putBoolean("c0", contador0.isEnabled());
    editor.putBoolean("c1", contador1.isEnabled());
    editor.putBoolean("c2", contador2.isEnabled());
    editor.putBoolean("c3", contador3.isEnabled());
    editor.putBoolean("c4", contador4.isEnabled());
    editor.putBoolean("c5", contador5.isEnabled());
    editor.putBoolean("c6", contador6.isEnabled());
    editor.putBoolean("c7", contador7.isEnabled());
    editor.putBoolean("c8", contador8.isEnabled());
    editor.putBoolean("c9", contador9.isEnabled());
    editor.putBoolean("c10", contador10.isEnabled());
    editor.putBoolean("c11", contador11.isEnabled());
    editor.putBoolean("c12", contador12.isEnabled());
    editor.commit();
}

加载状态:

private void loadContadors() {
    Toast.makeText(this, "load"+contador6.isEnabled(), Toast.LENGTH_SHORT).show();

    if(saved==true){
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

        /*for (int i = 0; i < contador.length; i++)
            contador[i].setEnabled(prefs.getBoolean("contador" + i, true));*/
        contador0.setEnabled(prefs.getBoolean("c0", false));
        contador1.setEnabled(prefs.getBoolean("c1", false));
        contador2.setEnabled(prefs.getBoolean("c2", false));
        contador3.setEnabled(prefs.getBoolean("c3", false));
        contador4.setEnabled(prefs.getBoolean("c4", false));
        contador5.setEnabled(prefs.getBoolean("c5", false));
        contador6.setEnabled(prefs.getBoolean("c6", false));
        contador7.setEnabled(prefs.getBoolean("c7", false));
        contador8.setEnabled(prefs.getBoolean("c8", false));
        contador9.setEnabled(prefs.getBoolean("c9", false));
        contador10.setEnabled(prefs.getBoolean("c10", false));
        contador11.setEnabled(prefs.getBoolean("c11", false));
        contador12.setEnabled(prefs.getBoolean("c12", false));



          for(i=0;i<contador.length;i++){
                if(contador[i].isEnabled()){
                    contador[i].setBackgroundResource(R.drawable.amarillo);
                }

                if(contador[i].isEnabled() && contador[i].isChecked()){
                    contador[i].setBackgroundResource(R.drawable.naranja);          
                }   

                if(!contador[i].isEnabled()){
                    contador[i].setBackgroundResource(R.drawable.gris); 
                }

                if(contador[i].isEnabled() && !contador[i].isChecked()){
                    contador[i].setBackgroundResource(R.drawable.amarillo);
                    }
                }

    }
}

并调用这些方法:

    @Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    saveContadors();
    Toast.makeText(this, "save", Toast.LENGTH_SHORT).show();

}

@Override
protected void onResume() {
    super.onPostResume();
    loadContadors();

}

@Override
public void onBackPressed() {
    // TODO Auto-generated method stub
    super.onBackPressed();
    saveContadors();
    Toast.makeText(this, "save"+contador6.isEnabled(), Toast.LENGTH_SHORT).show();

}

如果启用或禁用,我想保留。如果选中,我不想保存。

【问题讨论】:

  • editor.commit();不见了
  • 是的,我忘了说,但这不是问题所在。无论如何它都不起作用(我编辑了代码)

标签: android checkbox save boolean sharedpreferences


【解决方案1】:

看看CheckBoxPreference:http://developer.android.com/reference/android/preference/CheckBoxPreference.html

它包含在默认的 SharedPreferences 中,因此更新首选项变得轻而易举。

【讨论】:

  • 你知道这是否是唯一的方法吗?因为我应该改变我的大部分代码
  • @PabloVillar 因为你有很多复选框,我建议使用这个或 SQLiteDatabase developer.android.com/reference/android/database/sqlite/…
  • 不,这不是唯一的方法,但这不是很多代码 - 为什么不使用最干净的解决方案呢?
【解决方案2】:

我的代码很好。错误是没有保存布尔值“已保存”!。一个愚蠢的错误。代码如下所示:

private void saveContadors() {
        saved=true;

...

private void loadContadors() {
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
        saved=prefs.getBoolean("saved", false);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-19
    • 2019-09-11
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-19
    • 2019-06-02
    相关资源
    最近更新 更多