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

5 minutos de lectura

avatar de usuario
vinothp

En mi aplicación tengo una función de cierre de sesión. Si el usuario hace clic en cerrar sesión, va a la pantalla de inicio. Ahora estoy saliendo de mi aplicación presionando el botón Atrás. Pero lo que quiero es que necesito salir automáticamente (es decir, programáticamente) de la misma manera que la funcionalidad del botón Atrás. Sé que llamar a finish() hará la funcionalidad. Pero la cosa es que va a la actividad anterior.

  • Incluso si presiona el botón Atrás, se mostrará la actividad anterior…

    – Tarún

    23 de mayo de 2012 a las 11:17

  • solo usa terminar();

    – V.J.

    23 de mayo de 2012 a las 11:20

  • @Tarun Estoy usando este código para borrar todo el historial ExitActivity.this.finish(); Intent intent1 = new Intent(ExitActivity.this,PinActivity.class); intent1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); iniciarActividad(intento1);

    – vinothp

    23 de mayo de 2012 a las 11:22


  • @ 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.

    – V.J.

    23 de mayo de 2012 a las 11:24


avatar de usuario
Tarún

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();   
}

  • ¿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 … ¿tengo razón?

    – drulabs

    23 de mayo de 2012 a las 11:21

  • @KKD si tiene que admitir API por debajo de 5, entonces debe usar como arriba … android-developers.blogspot.co.uk/2009/12/…

    – Tarún

    23 de mayo de 2012 a las 11:24

  • Entonces onBackPressed está listo para comenzar… Inicie su ExitIntent dentro de onBackPressed()

    – Tarún

    23 de mayo de 2012 a las 11:29

  • Gracias por su comentario, no estoy usando el botón Atrás. 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. … Esto es necesario porque estoy usando la funcionalidad de alarma en mi aplicación… cada vez que la alarma aparece, el mensaje aparece en la pantalla de inicio como fondo… Así que necesito eliminarlo, eso es lo que estoy intentando…

    – vinothp

    23 de mayo de 2012 a las 11:37


  • Tuve problemas con onBackPressed() en algunas tabletas, como en un bloqueo.

    – Demoníaco

    23 de mayo de 2012 a las 13:21

No es necesario anular onBackPressed() – ya está definido como la acción que tu actividad realizará por defecto cuando el usuario pulse el botón Atrás. Así que solo llama onBackPressed() cada vez que desee “presionar programáticamente” el botón Atrás.

Eso solo resultaría en finish() aunque me llamen 😉

Creo que estás confundido con lo que hace el botón Atrás. Por defecto, 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 agregar una bandera CLEAR_TOP al iniciar su actividad desde el inicio de sesión para que la actividad de inicio de sesión no esté allí cuando salga de la suya.

  • Hola, gracias por tu respuesta. Suena bien, pero probé tu enfoque nuevamente y terminé en la misma pantalla de inicio de sesión. ¿Podrías ayudarme con esto?

    – vinothp

    29 de mayo de 2012 a las 12:17


  • 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.

    – Yevgueni Simkin

    6 de mayo de 2015 a las 6:28

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 Atrás, regresan al fragmento anterior.

  • Esto es precisamente correcto y merece más votos a favor.

    – Yevgueni Simkin

    6 de mayo de 2015 a las 6:29

simplemente puede usar onBackPressed();

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

  • Gracias por tu comentario… OnBackPressed puedo insertar 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

    23 de mayo de 2012 a las 11:19

  • haz una cosa… donde quieras llamar, cuando quieras llamar solo llama a esta función. puede llamarlo dentro de onCreate en función de una bandera o cualquier evento que desee.

    – drulabs

    23 de mayo de 2012 a las 11:23

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

avatar de usuario
verde negro

Para usuarios de Kotlin y trabajando con fragmentos:

usar finish() si está navegando a través de actividades, pero para fragmentos puede eliminar el fragmento por su etiqueta de fragmento.

Al navegar al fragmento use:

myFragment = myFragment(this)            

parentFragmentManager.beginTransaction()
                .setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out)
                .add(R.id.baseFragmentContainer, myFragment, "MYFRAGMENT")
                .addToBackStack("myFragmentNameInStack")
                .commit()

luego, al tocar su botón en particular y simular una presión de “botón atrás”, haga lo siguiente:

    binding.someButton.setOnClickListener {
        activity?.supportFragmentManager?.
        popBackStack("myFragmentNameInStack", FragmentManager.POP_BACK_STACK_INCLUSIVE)
    }

Esto eliminará el fragmento agregado por etiqueta "myFragmentNameInStack"mostrando en pantalla el anterior.

¿Ha sido útil esta solución?