0

I have two switch buttons that trigger some actions. If I activate A, action A happens, if I activate B, action B happens but if I activate both A and B nothing happens. Here is my code:

switch1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked) {
                toggled_if_debug_activated();
                checker1 = true;
            }
            else {
                normal_main_list();
            }
        }
    });

    switch0.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked) {
                toggled_if_image_mode_activated();
                checker2 = true;
            }
            else {
                normal_main_list();
            }
        }
    });

I've tried so many things but nothing worked. How do I add an action C (ex. toggled_if_all_checked) that is triggered ONLY when both of the Switches are on? As far as I've researched .setOnCheckedChangeListener doesn't support anything like (switch0 && switch1).setOnCheckedChangeListener(...). So how do I do this?

Thank you in advance and may your roads lead you to warm sands!

================================ EDIT - SOLUTION ============================

Liar's solution bellow worked almost flawlessly but I had some bugs, respectively when activating both switches and trying to deactivate only one of them, the output was bugging a little. Better explaining:

You activate Switch A => Output A; You activate Switch B => Output B; You activate Switch A && B => Output C; You deactivate either A or B and the program was showing Outputs B or A (Basically upside down working)

This is the code that I came up with:

switch0.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                if(isChecked && switch1.isChecked())
                {
                    toggle_C();
                }
                else
                if(isChecked && !switch1.isChecked())
                {
                    toggle_A();
                }
                else
                if (!isChecked && switch1.isChecked())
                {
                    toggle_B();
                }
                else {
                    toggle_DEFAULT();
                }
            }
        });
switch1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                if(isChecked && switch0.isChecked())
                {
                    toggle_C();
                }
                else
                if(isChecked && !switch0.isChecked())
                {
                    toggle_B();
                }
                else
                if (!isChecked && switch0.isChecked())
                {
                    toggle_A();
                }
                else {
                    toggle_DEFAULT();
                }
            }
        });

Maybe it's not the most professional solution but it works fine and it's bug free. Thank you all that helped me! May your roads lead you to warm sands

M'aiq the Coder
  • 762
  • 6
  • 18
  • Put condition in ChangeListener of switch1 `if (isChecked && switch0.isChecked()) { //both switch is checked }` and for switch0 `if (isChecked && switch1.isChecked()) { //both switch is checked }` – PriyankVadariya Jul 16 '18 at 06:52

3 Answers3

1

You can check another switch state like this:

    switch1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked && switch0.isChecked()) {
                // Do something
            }
            else {
                normal_main_list();
            }
        }
    });

    switch0.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked && switch1.isChecked()) {
                // Do something
            else {
                normal_main_list();
            }
        }
    });
Liar
  • 1,235
  • 1
  • 9
  • 19
0

Change this:

switch1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    if (isChecked) {
        toggled_if_debug_activated();...
        checker1 = true;
    }
    else {
        if(checker1 && checker2){
            normal_main_list();
        }
    }
}
});

switch0.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if (isChecked) {
            toggled_if_image_mode_activated();
            checker2 = true;
        }
        else {
            if(checker1 && checker2){
                normal_main_list();
            }
        }
    }
});
Sagar
  • 23,903
  • 4
  • 62
  • 62
Shubham Vala
  • 1,024
  • 7
  • 18
0

You can do this:

switch1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked) {
                toggled_if_debug_activated();
                checker1 = true;
            }
            else {
                checker1 = false;
                normal_main_list();
            }

            if (checker1 && checker2) {
                // your code here
            }
        }
    });

    switch0.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked) {
                toggled_if_image_mode_activated();
                checker2 = true;
            }
            else {
                checker2 = false
                normal_main_list();
            }

            if (checker1 && checker2) {
                // your code here
            }
        }
    });