Tengo un problema con clearChecked() de RadioGroup. Le estoy mostrando una pregunta de opción múltiple al usuario y luego de que el usuario selecciona una respuesta, verifico la respuesta, le doy algunos comentarios y luego paso a la siguiente pregunta. En el proceso de pasar a la siguiente pregunta, verifico ClearCheck en RadioGroup.Error en clearCheck de Android() para RadioGroup?
¿Alguien me puede explicar por qué el método onCheckedChanged se llama 3 veces? Una vez que ocurre realmente el cambio (con el usuario cambia), una vez cuando borro (compruebo con -1 como el ID seleccionado) y una vez en el medio (con el usuario cambia de nuevo)?
Por lo que pude ver, el segundo disparador es provocado por clearCheck. Código de abajo:
private void checkAnswer(RadioGroup group, int checkedId){
// this makes sure it doesn't blow up when the check is cleared
// also we don't check the answer when there is no answer
if (checkedId == -1) return;
if (group.getCheckedRadioButtonId() == -1) return;
// check if correct answer
if (checkedId == validAnswerId){
score++;
this.giveFeedBack(feedBackType.GOOD);
} else {
this.giveFeedBack(feedBackType.BAD);
}
// allow for user to see feedback and move to next question
h.postDelayed(this, 800);
}
private void changeToQuestion(int questionNumber){
if (questionNumber >= this.questionSet.size()){
// means we are past the question set
// we're going to the score activity
this.goToScoreActivity();
return;
}
//clearing the check
gr.clearCheck();
// give change the feedback back to question
imgFeedback.setImageResource(R.drawable.question_mark); //OTHER CODE HERE
}
y el método de ejecución se ve así
public void run() {
questionNumber++;
changeToQuestion(questionNumber);
}
Gracias @qbeticus tú, yo maná ged al final para usar una variable booleana para determinar si onCheckedChanged debería continuar evaluando la opción marcada. –
Gracias por confirmar que esto es un error, lo estaba sospechando después de ver el extraño comportamiento del radiogrupo. –