studio programacion herramientas fundamentos con avanzado aplicaciones android back back-stack activity-stack

programacion - Android: evitar volver a la actividad anterior



manual de android en pdf (11)

Hay dos soluciones para su caso, como por ejemplo si la actividad A comienza con 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.

Intent intent = new Intent(activityA.this, activityB.class); startActivity(intent); finish(); // Destroy activity A and not exist in Back stack

2. Desactivado la acción del botón volver atrás.

Hay dos formas de evitar el evento de vuelta como se muestra a continuación,

1) Recomendar enfoque

@Override public void onBackPressed() { }

2) Reemplazar el método deKeyDown

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

Espero que sea útil, pero aún así depende de tus situaciones.

Buena suerte @.@

Luna

Quiero hacer esto en Android: básicamente cuando presiona el botón BACK en el teléfono, quiero evitar que una actividad específica regrese a la anterior.

Específicamente, tengo pantallas de inicio de sesión y registro, ambas inician una nueva actividad llamada HomeScreen cuando se produce un inicio de sesión / registro exitoso. Una vez que se inicia HomeScreen, quiero evitar que los usuarios puedan volver a iniciar sesión o registrar pantallas presionando la tecla ATRÁS.

Intenté usar Intent.FLAG_ACTIVITY_NO_HISTORY pero dado que la aplicación tiene integración con Facebook, cuando se usa el ''Inicio de sesión con Facebook'', Facebook debería regresar a la pantalla de inicio de sesión, por lo tanto, debo mantener un historial de estas actividades.

Pensé en anular el comportamiento del botón ATRÁS en HomeScreen para finalizar la aplicación directamente cuando se presiona el botón y utilicé

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

pero eso tampoco funciona.

Soy bastante nuevo en el desarrollo de Android, por lo que cualquier ayuda sería muy útil.

Gracias por adelantado.


La respuesta de paulsm4 es la correcta. Si en onBackPressed() acaba de regresar, deshabilitará el botón Atrás. Sin embargo, creo que un mejor enfoque dado su caso de uso es voltear la lógica de la actividad, es decir, hacer de su actividad hogareña la principal, verificar si el usuario ha iniciado sesión allí, si no, iniciar la actividad de inicio de sesión. La razón es que si anulas el botón Atrás en tu actividad principal, la mayoría de los usuarios se confundirán cuando presionen hacia atrás y tu aplicación no hará nada.


La siguiente solución puede ser muy útil en el escenario habitual de inicio de sesión / actividad principal o implementando una pantalla de bloqueo.

Para minimizar la aplicación en lugar de volver a la actividad anterior, puede anular onBackPressed() esta manera:

@Override public void onBackPressed() { moveTaskToBack(true); }

moveTaskToBack(boolean nonRoot) deja tu pila posterior tal como está, simplemente coloca tu tarea (todas las actividades) en segundo plano. Lo mismo que si el usuario presionó 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 verdadero, funcionará para cualquier actividad en una tarea.


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, inmediatamente después de llamar a startActivity , llame a finish() . Cuando los usuarios presionen el botón Atrás, no podrán ir a la actividad de inicio de sesión porque se eliminó de la pila.



Poner

finish();

Inmediatamente después de ActivityStart para detener la actividad impidiendo cualquier forma de volver a ella. Luego añade

onCreate(){ getActionBar().setDisplayHomeAsUpEnabled(false); ... }

A la actividad que estás comenzando


Poner finish() justo después

Intent i = new Intent(Summary1.this,MainActivity.class); startActivity(i); finish();



Simplemente anule el método onKeyDown y verifique si se presionó el botón Atrás.

@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { //Back buttons was pressed, do whatever logic you want } return false; }


finish() le da un método para cerrar la actividad actual, no toda la aplicación. Y es mejor que no intentes buscar métodos para eliminar la aplicación. Pequeño consejo.

¿Has probado la conjunción de Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_NO_HISTORY Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_NO_HISTORY ? ¡Recuerda usar estas banderas en la actividad inicial de Intent !


Este método funciona bien

Intent intent = new Intent(Profile.this, MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent);