【问题标题】:multiple toggle button enable or disable in a single method多个切换按钮以单一方法启用或禁用
【发布时间】:2017-10-26 18:20:52
【问题描述】:

我有 3 个切换按钮,如果启用 1 个,其他 2 个将被禁用。我可以通过 if 语句来实现这一点。但是我需要为所有的切换按钮编写不同的 if。

 case toggleButton1:
            if(toggleButton[0].isChecked())
            {
                toggleButton[1].setEnabled(false);
                toggleButton[2].setEnabled(false);
            }
            else
            {
                toggleButton[1].setEnabled(true);
                toggleButton[2].setEnabled(true);
            }
        break;

 case R.id.toggleButton2:

            if(toggleButton[1].isChecked())
            {
                toggleButton[0].setEnabled(false);
                toggleButton[2].setEnabled(false);
            }
            else
            {
                toggleButton[0].setEnabled(true);
                toggleButton[2].setEnabled(true);
            }

            break;

case R.id.toggleButton3:
            if(toggleButton[2].isChecked())
            {
                toggleButton[1].setEnabled(false);
                toggleButton[0].setEnabled(false);
            }
            else
            {
                toggleButton[1].setEnabled(true);
                toggleButton[0].setEnabled(true);
            }
            break;

如何将其归为一个方法?

编辑:

如果我尝试如下。

          private void toggle(int i) {
           if(i==0) {j=1,k=2} elseif(i==1) {j=0,k=2}else{j=0,k=1}

            if(toggleButton[i].isChecked())
            {
                toggleButton[j].setEnabled(false);
                toggleButton[k].setEnabled(false);
            }
            else
            {
                toggleButton[j].setEnabled(true);
                toggleButton[k].setEnabled(true);
            }

           }

【问题讨论】:

  • 这个答案可以帮助你stackoverflow.com/a/5837927/7073808
  • @UltimateDevil - 我想启用和禁用按钮,所以我没有去广播组。
  • 如果你简化上述方法,我认为你必须使用 if else 语句

标签: android togglebutton android-togglebutton


【解决方案1】:

试试这个使用setOnCheckedChangeListener的toggleButton

toggleButton1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    if(isChecked)
    {
        toggleButton[1].setEnabled(false);
        toggleButton[2].setEnabled(false);
    }
    else
    {
        toggleButton[1].setEnabled(true);
        toggleButton[2].setEnabled(true);
    }

}
});

【讨论】:

  • 我想简化为单一方法,这样我就不需要使用这么多的 if 了。
【解决方案2】:

创建一个这样的类

private static class OnToggleButtonChangeListener implements CompoundButton.OnCheckedChangeListener{
    private final ToggleButton toggleButton1;
    private final ToggleButton toggleButton2;

    public OnToggleButtonChangeListener(ToggleButton toggleButton1, ToggleButton toggleButton2){
        this.toggleButton1 = toggleButton1;
        this.toggleButton2 = toggleButton2;
    }

    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        toggleButton1.setEnabled(!isChecked);
        toggleButton2.setEnabled(!isChecked);
    }
}

将侦听器分配给按钮并提供 2 个按钮,如果切换状态发生更改,则应禁用这些按钮

toggleButtonXy.setOnCheckedChangeListener(new OnToggleButtonChangeListener(toggleButtonX, toggleButtonY));

【讨论】:

    【解决方案3】:

    你可以试试我的代码:

    private void setChecked(int id) {
        try {
            ToggleButton[] toogles = {toogle1, toogle2, toogle3};
    
    
    
            for (int i = 0; i < toogles.length; i++) {
                if (id != i) {
                    toogles[i].setEnabled(false);
    
                } else {
                    toogles[i].setEnabled(true);
    
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    

    【讨论】:

      【解决方案4】:

      试试下面的代码

      @Override
          public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
              switch(buttonView.getId()){
                  case R.id.btn1:
                      btn2.setEnabled(!isChecked);
                      btn3.setEnabled(!isChecked);
                  break;
                  case R.id.btn2:
                      btn1.setEnabled(!isChecked);
                      btn3.setEnabled(!isChecked);
                  break;
                  case R.id.btn3:
                      btn1.setEnabled(!isChecked);
                      btn2.setEnabled(!isChecked);
                  break;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-03
        • 2020-04-19
        • 1970-01-01
        • 2020-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多