Only do something when two Switch Buttons are independently checked / activated

91 Views Asked by At

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

3

There are 3 best solutions below

1
Liar On BEST ANSWER

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();
            }
        }
    });
0
Shubham Vala On

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

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