-1

I have a 3 toggleButtons and if 1 is enabled other 2 will be disabled. I am able to achieve this through if statement. But I need to write different if for all the toggleButtons.

 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;

How can I group this in to a single method?

EDIT:

How about if i try like below.

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

           }
user2269164
  • 1,095
  • 2
  • 15
  • 31

4 Answers4

0

try this use setOnCheckedChangeListener of 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);
    }

}
});
AskNilesh
  • 67,701
  • 16
  • 123
  • 163
  • i want to simplify to single method so that i dont need to use the so many if's. – user2269164 Oct 26 '17 at 09:32
  • @user2269164 you should use `setOnCheckedChangeListener` when perticular toggleButton is checked or unchecked than add your logic in it – AskNilesh Oct 26 '17 at 09:36
0

Create a class like this

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

Assign it the listener to the button and supply the 2 buttons that shall be disabled if the toggle-state changes

toggleButtonXy.setOnCheckedChangeListener(new OnToggleButtonChangeListener(toggleButtonX, toggleButtonY));
Biercules
  • 21
  • 5
0

You can try my code :

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();
    }
}
Thientvse
  • 1,753
  • 1
  • 14
  • 23
0

Try below code

@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;
    }
}
Munir
  • 2,548
  • 1
  • 11
  • 20