我有两个触发某些动作的开关按钮。如果我激活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();
}
}
});
也许这不是最专业的解决方案,但是它可以正常工作并且没有错误。谢谢所有对我有帮助的人!愿你的道路将您引向温暖的沙滩
答案 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
}
}
});