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

时间:2017-06-15 17:03:39

标签: android checkbox savestate

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

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

所以,我想知道是否有办法在checked方法中保存复选框状态,或者有其他方法来实现这一点。如果有人知道为复选框保存了状态并让它们保持一定的可绘性,并且被检查0,1或2次,我将非常感激。提前谢谢!

1 个答案:

答案 0 :(得分:0)

实际上,即使app已关闭,SharedPreferences仍然是保持CheckBoxes状态的不错选择。只需保存正确的密钥:值duple使其正常工作:我将使用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
    }

要在应用程序启动时设置CheckBox的状态(例如,在方法onResume()上),请从SharedPreferences获取特定复选框的计数值并设置正确的颜色。