仅当两个开关按钮被独立检查/激活时,才做某事

时间:2018-07-16 06:46:52

标签: android button uiswitch ischecked

我有两个触发某些动作的开关按钮。如果我激活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(...)之类的东西。那么我该怎么做呢?

预先感谢您,愿您的道路将您引向温暖的沙滩!

===============================编辑-解决方案============= ================

说谎者的解决方案几乎可以完美地工作,但是我有一些错误,分别是在激活两个开关并尝试仅禁用其中一个开关时,输出有一些bug。更好的解释:

  

您激活开关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 个答案:

答案 0 :(得分:1)

您可以像这样检查另一个开关状态:

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

答案 1 :(得分:0)

更改此:

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

答案 2 :(得分:0)

您可以这样做:

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