¿Cómo presionar el botón Atrás en Android mediante programación?

78

En mi aplicación tengo una función de cierre de sesión. Si el usuario hace clic en cerrar sesión, irá a la pantalla de inicio. Ahora salgo de mi aplicación presionando el botón Atrás. Pero lo que quiero es salir automáticamente (es decir, programáticamente) al igual que la funcionalidad del botón de retroceso. Sé que llamando a finish () hará la funcionalidad. Pero es que pasa a la actividad anterior.

vinothp
fuente
Incluso si presiona el botón Atrás, se mostrará la actividad anterior ...
Tarun
8
solo usa finish ();
VJ
1
@Tarun Estoy usando este código para borrar todo el historial ExitActivity.this.finish (); Intención intent1 = nueva Intención (ExitActivity.this, PinActivity.class); intent1.setFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity (intent1);
vinothp
@ user1216003 estás en el camino correcto. Hará lo mismo que el botón Atrás con la configuración de la bandera en la intención.
VJ

Respuestas:

121

onBackPressed()es compatible desde: API nivel 5

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK)) {
        onBackPressed();
    }
}

@Override
public void onBackPressed() {
    //this is only needed if you have specific things
    //that you want to do when the user presses the back button.
    /* your specific things...*/
    super.onBackPressed();   
}
Tarun
fuente
3
¿Cual es el punto de esto? estás escribiendo lo que hace Android por defecto. Llama a onBackPressed () cuando se presiona el botón Atrás ... ¿estoy en lo cierto?
drulabs
3
@KKD si tiene que admitir API por debajo de 5, entonces debe usar como arriba .. android-developers.blogspot.co.uk/2009/12/…
Tarun
1
Entonces onBackPressed está listo para empezar ... Inicie su ExitIntent dentro de onBackPressed ()
Tarun
1
Gracias por su comentario, no estoy usando el botón de retroceso ... Estoy usando un botón de cierre de sesión ... cuando el usuario hace clic en él, se completa el cuadro de diálogo preguntando sí o no ... si es así, va a la pantalla de inicio donde tengo que salir automáticamente pero me atasco allí ... Esto es necesario porque estoy usando la funcionalidad de alarma en mi aplicación ... cuando alguna vez aparece la alarma, aparece el mensaje de fondo de la pantalla de inicio ... Así que necesito eliminarlo, eso es lo que estoy intentando ...
vinothp
Tuve problemas con onBackPressed () en algunas tabletas, como en crash.
Demonick
42

No es necesario que la anule onBackPressed(); ya está definida como la acción que realizará su actividad de forma predeterminada cuando el usuario presione el botón Atrás. Así que simplemente llame onBackPressed()cuando quiera para "presionar programáticamente" el botón Atrás.

Sin embargo, eso solo resultaría en finish()ser llamado;)

Creo que estás confundido con lo que hace el botón Atrás. De forma predeterminada, es solo una llamada a finish(), por lo que simplemente sale de la actividad actual. Si tiene algo detrás de esa actividad, se mostrará esa pantalla.

Lo que puede hacer es cuando inicie su actividad desde el inicio de sesión, agregue una marca CLEAR_TOP para que la actividad de inicio de sesión no esté allí cuando salga de la suya.

josephus
fuente
Hola, Gracias por tu respuesta ... Suena bien, pero intenté tu enfoque nuevamente
terminé
1
Esta es la respuesta correcta, pero debe editarla porque no siempre es "solo una llamada para finalizar ()". En mi caso (y funciona exactamente como pretendo) es una forma de retroceder a través de la pila de fragmentos, y no llama a finish () hasta que haya llegado al primer elemento de esa pila.
Yevgeny Simkin
9

A veces es útil anular el método onBackPressed () porque en caso de que trabaje con fragmentos y esté cambiando entre ellos si presiona el botón hacia atrás, volverán al fragmento anterior.

Serj Moya
fuente
1
Esto es precisamente correcto y merece más votos a favor.
Yevgeny Simkin
5

Llame onBackPresseddespués de anularlo en su actividad.

drulabs
fuente
2
Gracias por tu comentario .. OnBackPressed puedo insertar el código cuando se presiona el botón Atrás .. Lo que quiero es llamar al botón Atrás automáticamente ... estoy claro
vinothp
haz una cosa ... donde quieras llamar, cuando quieras llamar simplemente llama a esta función. puede llamarlo dentro de onCreate según una bandera o cualquier evento que desee.
drulabs
1

simplemente puede usar onBackPressed ();

o si está usando un fragmento, puede usar getActivity (). onBackPressed ()

Abhishek Patil
fuente
0

Simplemente agregue finish (); en su primera clase '(actividad de inicio de sesión) onPause (); método. eso es todo

rayo dbs
fuente