代码之家  ›  专栏  ›  技术社区  ›  M'aiq the Coder

仅当独立检查/激活两个开关按钮时才执行操作

  •  0
  • M'aiq the Coder  · 技术社区  · 7 年前

    我有两个开关按钮可以触发一些动作。如果我激活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(例如,如果选中了“全部”则切换为“全部”)?据我所知 .setOnCheckedChangeListener 不支持类似 (switch0&switch1).setOnCheckedChangeListener(…) . 那我该怎么做呢?

    提前谢谢你,愿你的道路带你到温暖的沙滩!

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

    说谎者 Bellow的解决方案几乎完美无缺,但我有一些错误,分别是当激活两个开关并尝试仅停用其中一个开关时,输出有点问题。更好的解释:

    您激活开关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();
                    }
                }
            });
    

    也许这不是最专业的解决方案,但它工作得很好,而且没有bug。谢谢你对我的帮助!愿你的道路引导你到温暖的沙地

    3 回复  |  直到 7 年前
        1
  •  1
  •   Liar    7 年前

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

        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();
                }
            }
        });
    
        2
  •  0
  •   user8959091    7 年前

    您可以这样做:

    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
                }
            }
        });
    
        3
  •  0
  •   Sagar    7 年前

    更改此:

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