Pregunta

Tengo un bloque de código, que verifica el estado verificado de la casilla de verificación y muestra el valor en consecuencia, pero en mi código tengo un lugar donde tengo que usar una declaración como

if (cb1.isChecked()) {
a="abc";        
} 

else if(cb1.isChecked() && cb2.isChecked()) {
a="pqr";
}

else if(cb2.isChecked()){
a="asd";
}

else{
a="xyz";
}

Obtengo los valores si se seleccionan CheckBox1 o CheckBox2, pero cuando se seleccionan ambos casillas de verificación, obtengo el resultado solo como "ABC"

¿Alguna idea de qué le pasa al código?

¿Fue útil?

Solución

Esto es porque es un else if en vez de ifs. Una vez que el primero está satisfecho, no está revisando a los demás. Cambie el orden en el que verifica estos. Entonces algo como

if (cb1.isChecked() && cb2.isChecked()) {
    a="abc";        
} 
else if(cb1.isChecked()) {
    a="pqr";
}   
else if(cb2.isChecked()){
    a="asd";
}   
else{
    a="xyz";
}

Otros consejos

Cambiar a:

if(cb1.isChecked() && cb2.isChecked()) {
a="pqr";
}

else if (cb1.isChecked()) {
a="abc";        
} 

else if(cb2.isChecked()){
a="asd";
}

else{
a="xyz";
}

En su código, si se revisara CD1, ya no iría al otro.

En una escalera if, solo se ejecutará un bloque, debe hacerlo como lo siguiente:

if (cb1.isChecked()) {
    a = cb2.isChecked() ? "pqr" : "abc";       
} else if(cb2.isChecked()){
    a="asd";
}
else{
    a="xyz";
}

O

if(cb1.isChecked() && cb2.isChecked()) {
    a="pqr";
}
else if (cb1.isChecked()) {
    a="abc";        
} 
else if(cb2.isChecked()){
    a="asd";
}
else{
    a="xyz";
}

Con lo otro si no lo hace, entra el primero si no ingresa al resto de ellos, solo tome el otro y solo el usuario y solo funciona

Modificar primero si condición a

if (cb1.ischecked () &&! cb2.ischecked ())

En la actualidad, dado que las primeras condiciones de IF solo dependen del valor de CB1, por lo que el control entra en el primer bloque.

El control nunca entra en el segundo bloque en la lógica actual.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top