Делайте что-то только тогда, когда две кнопки переключения независимо проверены / активированы

У меня есть две кнопки переключения, которые запускают некоторые действия. Если я активирую A, происходит действие A, если я активирую B, происходит действие B, но если я активирую и A, и B, ничего не происходит. Вот мой код:

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

Я пробовал так много вещей, но ничего не получалось. Как добавить действие C (например, toggled_if_all_checked), которое запускается ТОЛЬКО, когда оба коммутатора включены? Насколько я исследовал, .setOnCheckedChangeListener не поддерживает ничего подобного (switch0 && switch1).setOnCheckedChangeListener (...). Так как мне это сделать?

Заранее спасибо, и пусть ваши дороги приведут вас к теплым пескам!

================================ РЕДАКТИРОВАТЬ - РЕШЕНИЕ =============== =============

РешениеLiar ниже работало почти безупречно, но у меня были некоторые ошибки, соответственно, при активации обоих переключателей и попытке деактивировать только один из них, вывод немного глючил. Лучше объяснить:

Вы активируете переключатель A => Выход A; Вы активируете переключатель B => Выход B; Вы активируете переключатель A && B => Выход C; Вы деактивируете либо A, либо B, и программа показала выходы B или A (в основном работает вверх ногами)

Это код, который я придумал:

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

Возможно, это не самое профессиональное решение, но оно отлично работает и не содержит ошибок. Спасибо всем, кто мне помог! Пусть ваши дороги приведут вас к теплым пескам

3 ответа

Решение

Вы можете проверить другое состояние переключателя следующим образом:

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

Вы можете сделать это:

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

Изменить это:

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();
            }
        }
    }
});
Другие вопросы по тегам