【问题标题】:How to Enable a button after one checkbox or more are checked?选中一个或多个复选框后如何启用按钮?
【发布时间】:2013-11-12 06:02:15
【问题描述】:

我有一个问题,如果我有一个复选框列表,但我不知道有多少,因为它们是由用户生成的,我如何在至少一个或多个复选框时禁用/启用删除按钮被检查? 到目前为止我有这个代码 我是编程新手,所以请具体说明 提前谢谢你。

    @Override
    public void onCheckedChanged(CompoundButton cb, boolean DeleteButton) {
        if(cb.isChecked()){
            DeleteButton.setEnabled(true);
        }
        else if(DeleteButton.isEnabled()){
            DeleteButton.setEnabled(false);

【问题讨论】:

    标签: android button if-statement checkbox


    【解决方案1】:

    如果您只想知道是否选中了一个或多个CheckBoxes,则创建一个int 成员变量并在选中一个框时添加到它

     public class MyActivity
    {
        int count = 0;
    
        // oncreate...
    
       @Override
    public void onCheckedChanged(CompoundButton cb, boolean DeleteButton) {
        count = (DeleteButton) ? count+1 : count - 1; // if is checked then add
                                                     // add 1 to count else decrement
        // I'm not sure about what is below but now you have the count
        if(cb.isChecked()){
            DeleteButton.setEnabled(true);
        }
        else if(DeleteButton.isEnabled()){
            DeleteButton.setEnabled(false);
        }
    }
    };
    

    如果计数大于 0,现在禁用/启用按钮的方法(你至少有一个 CheckBox 被选中,就像

    @Override
    public void onCheckedChanged(CompoundButton cb, boolean DeleteButton) {
        count = (DeleteButton) ? count+1 : count - 1; // if is checked then add
                                                     // add 1 to count else decrement
            DeleteButton.setEnabled(count > 0);  // if count > 0 will be enabled
    }
    };
    

    但我认为您对onCheckChanged() 的第二个param 感到困惑。它表示是否检查Button,而不是检查Button 是什么。

    【讨论】:

    • 我要计算的是复选框,默认情况下应禁用删除按钮,当检查一个或更多的CB或更多时,应启用它
    • 我现在,我会尽快回复你,谢谢伙计
    • 请您向我解释一下“”cb.setOnCheckedChangeListener(ch); DeleteButton.setOnClickListener(new OnClickListener(){"" 以及你认为它有什么问题
    • 我不确定你想知道什么。我看不出有什么问题
    • 所以我厌倦了运行代码并得到两个错误,1-无法在原始类型 boolean 上调用 isEnabled() 和第二个“此行的多个标记 - 运算符 + 未定义参数类型(s) 对象,int""
    【解决方案2】:

    您可以管理检查项目的列表,并且每当更改检查状态时,检查列表是空还是有一些项目,然后处理启用或禁用按钮

        cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
            {
                if (isChecked)
                    list.add(itemId);
                else
                    list.remove(itemId);
    
    
                button.setEnabled(list.size() > 0); 
    
            }
        });
    

    【讨论】:

      【解决方案3】:

      如果我误解了您的问题,请告诉我,但如果您的意思是在选中一个或多个复选框时禁用删除按钮,您可以简单地跟踪选中的复选框数量。该值大于或等于一,则禁用删除按钮。例如:

      int i = 0;
      
      final Button DeleteButton = (Button)findViewById(R.id.button1);
      DeleteButton.setEnabled(false);
      final CheckBox cb = (CheckBox)findViewById(R.id.checkBox);
      OnCheckedChangeListener ch = new OnCheckedChangeListener(){ 
      
          @Override
          public void onCheckedChanged(CompoundButton cb, boolean DeleteButton) {
              if(cb.isChecked()){i++;} else{i--;}
              if(i >= 1){DeleteButton.setEnabled(true);} else{DeleteButton.setEnabled(false);}
          }
      };
      cb.setOnCheckedChangeListener(ch);
      DeleteButton.setOnClickListener(new OnClickListener(){
      

      ...

      【讨论】:

      • 我认为这应该可以,如果我错了,请纠正我删除按钮被禁用,然后当复选框(一个或多个)被选中时,它应该被禁用?但是这部分呢“”DeleteButton.setOnClickListener(new OnClickListener()“”
      • 正确,删除按钮最初将被禁用。每选中一个复选框,“i”就会增加 1。如果未选中复选框,则“i”将减少 1。最后一部分“DeleteButton.setOnClickListener(new OnClickListener()”只是从您的原始问题中复制的,但在单击 DeleteButton 时应该是您想要的任何内容。
      猜你喜欢
      • 2014-11-17
      • 2013-05-10
      • 2016-11-08
      • 1970-01-01
      • 1970-01-01
      • 2014-10-08
      • 2023-03-21
      • 2019-01-21
      • 1970-01-01
      相关资源
      最近更新 更多