0

我有两个触发一些动作的开关按钮。如果我激活 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();
                }
            }
        });

也许它不是最专业的解决方案,但它工作正常并且没有错误。谢谢所有帮助过我的人!愿你的道路带你到温暖的沙滩

4

3 回答 3

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();
            }
        }
    });
于 2018-07-16T06:51:51.473 回答
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();
            }
        }
    }
});
于 2018-07-16T06:52:29.057 回答
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
            }
        }
    });
于 2018-07-16T06:54:34.867 回答