Cuando se presiona el botón ATRÁS en el teléfono, quiero evitar que una actividad específica regrese a la anterior.
Específicamente, tengo pantallas de inicio de HomeScreen
sesión y registro , ambas comienzan una nueva actividad llamada cuando ocurre un inicio de sesión / registro exitoso. Una vez que se inicia HomeScreen, quiero evitar que los usuarios puedan regresar a las pantallas de inicio de sesión o registro presionando la tecla ATRÁS.
Intenté usarlo Intent.FLAG_ACTIVITY_NO_HISTORY
, pero como la aplicación tiene integración con Facebook, cuando se usa 'Iniciar sesión con Facebook', Facebook debería volver a la pantalla de inicio de sesión inicial, por lo tanto, debería mantener un historial de estas actividades.
Pensé en anular el comportamiento del botón ATRÁS HomeScreen
para finalizar directamente una aplicación cuando se presiona el botón y usé
@Override
public void onBackPressed() {
finish();
}
pero eso tampoco funciona.
Respuestas:
Mi sugerencia sería finalizar la actividad a la que no desea que los usuarios vuelvan. Por ejemplo, en su actividad de inicio de sesión, justo después de llamar
startActivity
, llamefinish()
. Cuando los usuarios presionan el botón Atrás, no podrán ir a la actividad de inicio de sesión porque se eliminó de la pila.fuente
finish
durante una transición compartida, puede desangrarse la actividad anterior. por ejemplo, si usted tieneHomeActivity
->IntermediateActivity
->FinalActivity
, y le llamaremosfinish()
en elIntermediateActivity
inmediatamente después de comenzar laFinalActivity
verá elHomeActivity
por un breve momento.La siguiente solución puede ser bastante útil en el escenario habitual de inicio de sesión / actividad principal o implementar una pantalla de bloqueo.
Para minimizar la aplicación en lugar de volver a la actividad anterior, puede anular
onBackPressed()
así:moveTaskToBack(boolean nonRoot)
deja la pila de respaldo como está, simplemente pone su tarea (todas las actividades) en segundo plano. Igual que si el usuario presionara el botón de Inicio .Parámetro
boolean nonRoot
: si es falso, esto solo funciona si la actividad es la raíz de una tarea; si es cierto, funcionará para cualquier actividad en una tarea.fuente
No estoy seguro de lo que quieres exactamente, pero parece que debería ser posible, y también parece que ya estás en el camino correcto.
Aquí hay algunos enlaces que pueden ayudar:
Deshabilitar el botón de retroceso en Android
¿Cómo puedo desactivar 'volver' a alguna actividad?
fuente
System.exit(0)
se llama (sé que no es la mejor práctica, pero solo quería dar un ejemplo).Hay dos soluciones para su caso, la actividad A comienza la actividad B, pero no desea volver a la actividad A en la actividad B.
1. Se eliminó la actividad anterior A de la pila posterior.
2. Desactivar la acción del botón de retroceso en la actividad B.
Hay dos formas de evitar el evento de retroceso como se muestra a continuación,
1) Recomendar enfoque
2, anular el método onKeyDown
Espero que sea útil, pero aún depende de tus situaciones.
fuente
finish()
. ¡Pensamiento innecesario connohistory
atributos, indicadores de intención, etiquetas de manifiesto de actividad principal, etc.! Tonto, gracias por la respuesta!Como ya se sugieren muchas soluciones excelentes, trataré de dar una explicación más dictiva.
Eliminar la actividad anterior de Backstack. Sencillo
Llamada
finish()
Método deEl flujo normal:
Todas las actividades se almacenan en una pila conocida como Backstack.
Cuando comienza una nueva Actividad (
startActivity(...)
), la nueva Actividad se empuja a la parte superior de la pila y cuando presiona el botón Atrás, la Actividad se saca de la pila.Un punto clave a tener en cuenta es que cuando se presiona el botón Atrás, el
finish();
método se llama internamente. Este es el comportamiento predeterminado del método onBackPressed ().Entonces, si desea omitir la Actividad B?
Simplemente agregue el
finish();
método después de sustartActvity(...)
en la Actividad Bfuente
finish()
le brinda un método para cerrar la actividad actual, no toda la aplicación. Y es mejor que no intente buscar métodos para eliminar la aplicación. Un pequeño consejo¿Has probado la conjunción de
Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_NO_HISTORY
? ¡Recuerde usar estas banderas alIntent
comenzar la actividad!fuente
FLAG_ACTIVITY_NO_HISTORY
evita que mi LoginScreen capture la devolución de llamada de Facebook cuando se utiliza Iniciar sesión con Facebook. Porque una vez que el foco se apaga de la pantalla de inicio de sesión, no se puede reanudar (ya que no hay historial). Pero no lo he probadoIntent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
, lo comprobaré, ¡gracias!finish()
método, no lo sabía.Poner
finish()
justo despuésfuente
La respuesta de paulsm4 es la correcta. Si
onBackPressed()
solo regresas, deshabilitará el botón Atrás. Sin embargo, creo que un mejor enfoque dado su caso de uso es cambiar la lógica de la actividad, es decir, hacer que la actividad de su hogar sea la principal, verificar si el usuario ha iniciado sesión allí, si no, inicie la actividad de inicio de sesión. La razón es que si anula el botón Atrás en su actividad principal, la mayoría de los usuarios se confundirán cuando presionen hacia atrás y su aplicación no hace nada.fuente
Si no desea volver a todas las actividades en su aplicación, puede usar
Obtenga más información aquí: http://developer.android.com/guide/topics/manifest/activity-element.html
fuente
Este método funciona bien
fuente
Simplemente anule el método onKeyDown y verifique si se presionó el botón Atrás.
fuente
Cuando creas
onBackPressed()
simplemente eliminasuper.onBackPressed();
y eso debería funcionarfuente
Poner
inmediatamente después de ActivityStart para detener la actividad e impedir cualquier forma de volver a ella. Luego añade
a la actividad que está comenzando.
fuente