En mi proyecto, tengo una actividad llamada "ExamMenuActivity" donde puedo elegir entre actividades de "Suma, Resta, Multiplicación y División".

Además de la actividad (llamada ExamAdditionActivity), tengo un método de control para regenerar el formulario de pregunta después de una respuesta determinada. Todo parece funcionar bien, puedo generar la pregunta y dar una respuesta y después de dar una respuesta, se genera una nueva pregunta en 2 segundos.

El problema que tengo es que, después de dar una respuesta correcta o incorrecta a la pregunta, en 2 segundos, si presiono rápidamente el botón Atrás del teléfono y no espero a que la pregunta se regenere, vuelvo a la página del menú del examen como quería (de nuevo a ExamMenuActivity) pero la pantalla cambia de nuevo a ExamAdditionActivity y veo una nueva pregunta generada nuevamente.

Por lo tanto, quiero poder volver a la actividad del menú de exámenes nuevamente cuando presione el botón Atrás del teléfono antes de que la pregunta se regenere y no quiero volver a ver la actividad ExamAddition con una nueva pregunta generada (digamos que cambié mi mente después de dar una respuesta a una pregunta adicional y quería elegir otra actividad del menú y no esperé al menos 2 segundos). He intentado anular la actividad con el método onBackPressed:

@Override
public void onBackPressed() {
    super.onBackPressed();
    finish();
}

Pero desafortunadamente eso no funcionó.

Así es como regenero la pregunta. Básicamente, reinicio la misma actividad en dos segundos con un controlador (había un código ejecutable dentro de mi controlador, pero como se mostraba anónimo, Android Studio me ofreció cambiarlo a una función lambda):

private void regenerateQuestion() {
        new Handler().postDelayed(() -> {
            Intent restartExamAdditionActivity = new Intent(ExamAdditionActivity.this, ExamAdditionActivity.class);

            overridePendingTransition(0, 0);
            startActivity(restartExamAdditionActivity);
            finish();
            overridePendingTransition(0, 0);
        }, TIME_OUT);

    }

Aunque no estoy seguro, creo que tengo el problema en el área de escucha de botones, ya que respondo a la pregunta y llamo al método regenetate () debajo de cada botón.

Espero que pueda haber una respuesta a mi problema. ¡Muchas gracias por pasar a ver mi publicación!

1
Confused Superman 13 mar. 2021 a las 19:24

1 respuesta

La mejor respuesta

Crea tu Handler como una variable miembro de tu clase, así:

Handler myHandler = new Handler();

Crea tu Runnable como una variable miembro de tu clase, así:

Runnable myRunnable = new Runnable() {
    @Override
    public void run() {
        Intent restartExamAdditionActivity = new Intent(ExamAdditionActivity.this, ExamAdditionActivity.class);

        overridePendingTransition(0, 0);
        startActivity(restartExamAdditionActivity);
        finish();
        overridePendingTransition(0, 0);
    }
};

Publique el Runnable usando la nueva variable:

myHandler.postDelayed(myRunnable, TIME_OUT);

Cuando desee cancelar la regeneración, haga esto:

myHandler.removeCallbacks(myRunnable);
0
David Wasser 14 mar. 2021 a las 11:48