Android - 如何通过单击带有多个复选框的复选框来过滤带有可绘制对象的复选框



我一直在研究这个问题,但我找不到带有复选框的可绘制对象的解决方案。我想做的是,当您单击此特定复选框时,它将过滤相应颜色的复选框。顺便说一下,这是一个片段。因此,我有可以是红色,黄色或绿色的复选框。如果用户单击它们,则会更改颜色。例如,我有一个黄色复选框,即 chkProgress,单击它时,我想找到所有黄色复选框并过滤黄色复选框。因此,我有可绘制对象 ID,我需要获取可绘制对象才能找到该颜色的复选框。我希望能够过滤用户单击 chkProgress 时黄色的复选框。所以,这是我的代码:

private CheckBox [] checkBoxes = new CheckBox[2];
checkBoxes[0] = chkStart;
checkBoxes[1] = chkDownload;
private Drawable yellowDrawable = getResources().getDrawable(R.drawable.custom_yellow_checkbox);
chkInProgess.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (chkInProgess.isChecked()){
//something here
if (chkStart.getDrawable == yellowDrawable) // need proper code here or a for loop to do this efficiently. 
} else if (!chkInProgess.isChecked()){
chkInProgess.setChecked(true);
}
}
});

以下是我需要找到的复选框,如果它们是黄色的:

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

以下是检查复选框是否为某种颜色的方法:

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

这是我恢复应用程序时的方法:

@Override
public void onResume() {
super.onResume();
start = mSharedPreferences.getInt(CHECK_START_ID, 0);
start = idChecked(chkStart, start);
countStart = start;
download = mSharedPreferences.getInt(CHECK_DOWNLOAD_ID, 0);
download = idChecked(chkDownload, download);
countDownload = download;
}

因此,我正在尝试获取可绘制对象并将它们与该颜色的复选框匹配。我找不到任何可以帮助我的东西。任何帮助将不胜感激。谢谢!

我想出了问题所在。因此,我制作了一种方法来检查复选框的计数是否为某个数字,就像我对检查方法所做的那样。我会将该数字的复选框设置为可见或不可见。

public int colorCheckYellow(CheckBox checkbox, int value){
if (value == 1)
checkbox.setVisibility(View.VISIBLE);
else
checkbox.setVisibility(View.GONE);
return value;
}

然后我这样称呼它:

chkInProgess.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (chkInProgess.isChecked()) {
countStart = colorCheckYellow(chkStart, countStart);
countDownload = colorCheckYellow(chkDownload, countDownload);
}else if (!chkInProgess.isChecked()) {
checkboxVisible();
}
}

我也有一些其他代码可以使一切正常工作,但仅此而已!

最新更新