Делайте что-то только тогда, когда две кнопки переключения независимо проверены / активированы
У меня есть две кнопки переключения, которые запускают некоторые действия. Если я активирую 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();
}
}
}
});