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.
No estoy seguro exactamente de lo que quiere, pero parece que debería ser posible, y también parece que ya está en el camino correcto.
Aquí hay algunos enlaces que pueden ayudar:
Deshabilitar el botón Atrás en Android
MyActivity.java =>
@Override
public void onBackPressed() {
return;
}
¿Cómo puedo desactivar ''volver atrás'' a alguna actividad?
AndroidManifest.xml =>
<activity android:name=".SplashActivity" android:noHistory="true"/>
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();
Si no quiere volver a todas las actividades en su aplicación, puede usar
android:launchMode="singleTask"
Obtenga más información aquí: http://developer.android.com/guide/topics/manifest/activity-element.html
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);