当前位置: 首页 > 知识库问答 >
问题:

Android--如何通过点击一个带有多个复选框的复选框来过滤带有抽屉的复选框

尉迟兴修
2023-03-14

我一直在研究这个问题,但我找不到一个带有复选框的get drawable的解决方案。我试图做的是,当你点击这个特定的复选框时,它会过滤相应颜色的复选框。顺便说一下,这是一个片段。所以,我有可以是红色、黄色或绿色的复选框。如果用户点击它们,它会改变颜色。例如,我有一个黄色的复选框,它是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;
}

下面是我恢复App时的方法:

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

所以,我正在尝试得到抽屉,并将它们与复选框的颜色相匹配。我找不到任何能帮助我的东西。任何帮助都将不胜感激。谢谢!

共有1个答案

酆出野
2023-03-14

我想出了问题所在。所以,我做了一个方法来检查复选框的计数是否是某个数字,就像我对checked方法做的那样。我会将带有该数字的复选框设置为“可见”或“不可见”。

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

我有一些其他的代码,以及使一切工作,但这是它!

 类似资料:
  • 问题内容: 我需要将复选框添加到JTree。自定义TreeCellRenderer / TreeCellEditor似乎是正确的方法。到目前为止,我在此网页中使用了CheckBoxNodeRenderer方法。除了两件事,它可以正常工作: 复选框上方+下方有额外的空格;我想使其与常规JTree相同。 我想区分单击复选框本身(应尝试切换复选框)和单击与复选框相关联的文本(应允许事件侦听器将此解释为单

  • 问题内容: 是否可以将复选框代替“链接名称”? 如果是这样怎么办? 谢谢, 问题答案: 是的,当然有可能。您可以使用标准复选框: 然后在单独的javascript文件中使用jQuery订阅此复选框的change事件,并毫不客气地对其进行AJAXify:

  • 我在这里使用这个示例代码创建一个JTree,其中所有的叶子都有一个复选框。我遇到的问题是,我还需要能够选择节点对象,而不必勾选复选框。在我的用例中,勾选复选框将使某些内容可见或隐藏,但选择节点将允许在UI的单独部分编辑对象。最好的方法是什么?是否可以检测何时单击复选框的“框”部分,或者是否选中节点? 我看到的另一个错误是,当文件夹有子元素时,文件夹左侧的指示器正确显示文件夹已打开: 但是如果'文件

  • 问题内容: 第一次在这里发布问题,如果违反任何Stack Overflow礼节,请提前道歉!:-) 我第一次去一些AngularJS,以便为我的老板创建概念证明。这是一个基本的租车列表应用程序,主列中有结果列表,侧面有一个过滤器面板。我设法从JSON对象中提取结果,并应用一个基本的过滤器,如下所示; 筛选器 …我还无法解决的一件事是如何添加一组复选框以应用过滤器,例如“汽车类型”,其中包含“迷你”

  • 问题内容: 如何创建带有可单击标签的HTML复选框(这意味着单击标签可以打开/关闭该复选框)? 问题答案: 方法1:包装标签标签 将复选框包装在标签内: 方法2:使用属性 使用属性(匹配复选框): 注意 :ID在页面上必须是唯一的! 说明 由于其他答案均未提及,因此标签最多可以包含1个输入并忽略该属性,并且将假定该属性用于其中的输入。 w3.org的摘录(重点介绍): [for属性]显式地将要定义

  • 问题内容: 我想过滤结果。 有一个葡萄酒清单,我的愿望是当未选中任何复选框时,将显示整个葡萄酒清单。 当仅选中1个复选框时,显示相关类别 当选中多个复选框时,将显示相关类别 我是AngularJS的新手,我尝试了ng-model都没有成功,这是没有与函数关联的ng-model的代码: 如何使用ng-model或ng-change将功能与每个复选框按钮相关联以具有实时过滤模型? 问题答案: 只是添加