Android如何保存3种不同检查状态的复选框状态

问题描述:

我是Android开发新手,我想知道如何在用户重新打开应用程序时在本地保存复选框状态,并且复选框保持红色,黄色或绿色。我将代码放在一个片段中,每次打开应用程序时,它都是我设置的默认红色。我有自定义的复选框,我有他们循环,当用户点击复选框,它保持检查,但改变颜色。我研究了很多,我尝试了SharedPreferences,但它不起作用,我需要知道让用户单击复选框并查看它是红色,黄色还是绿色的逻辑。我所看到的只是一个复选框被检查一次,并且它保存了状态,如果它被选中或不是,但我有多次复选框和每次更改颜色的复选框。这里是我用于复选框的方法的代码:Android如何保存3种不同检查状态的复选框状态

public int checked(CheckBox checkBox, int count){ 
    if (checkBox.isChecked()){ 
     count++; 
    } else if (!checkBox.isChecked()){ 
     checkBox.setChecked(true); 
     count++; 
    } 
    if (count == 1){ 
     checkBox.setButtonDrawable(R.drawable.custom_yellow_checkbox); 
    } 
    if (count == 2){ 
     checkBox.setButtonDrawable(R.drawable.custom_green_checkbox); 
    } 
    if (count > 2){ 
     count = 0; 
     checkBox.setButtonDrawable(R.drawable.custom_red_checkbox); 
    } 
    return count; 
} 

这是复选框方法本身,当它被选中时。

chkStart.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      countStart = checked(chkStart, countStart); 
     } 
    }); 

所以,我想知道是否有一种方法来保存复选框状态内部的检查方法或有其他方法来做到这一点。如果有人知道将状态保存为复选框,并让它们保持一定的可绘制状态,然后检查0,1或2次,我将非常感激。提前致谢!

实际上,即使应用程序已关闭,SharedPreferences仍然是保持CheckBox状态的好选择。只需保存正确的键值:双倍使它工作:我将使用checkboxId作为键和您用作值的计数变量。例如:

SharedPreferences mSharedPreferences = this.getSharedPreferences("preferences_key", Context.MODE_PRIVATE); 
    SharedPreferences.Editor editor; 

    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    editor = mSharedPreferences.edit(); 

    chkStart.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      countStart = checked(chkStart, countStart); 
      editor.putInt("checkStartId", countStart); 
      editor.apply(); 
     } 
    }); 
} 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     int value = mSharedPreferences.getInt("checkStartId", 0) // 0 is the default value, in case there is not value saved 
    } 

要设置复选框的状态时,应用程序启动时(例如在方法onResume())得到SharedPreferences针对特定复选框计值和设定正确的颜色。

+0

你能告诉我如何获得onResume()中的计数值吗?是它的editor.getInt(东西)或什么是获得计数值的方法。谢谢! – Karna

+0

我也得到一个空指针异常与上下文变量。我如何初始化上下文以便我没有空指针异常? – Karna

+0

我已经更新了我的答案,我没有测试过,但我认为它会起作用,请以此为例! :) –