Android eliminar Actividad de la pila trasera
De acuerdo, así que estoy un poco atónita sobre qué hacer con esto. Así que tengo la MainActivity, y desde allí una Actividad puede ser lanzada a DegreePlanActivity, y desde allí otra Actividad puede ser lanzada a EditDegreePlan. Tengo EditDegreePlan establecido en noHistory en el AndroidManifest. El problema es después de que guardan el EditDegreePlan que lanza una actividad a DegreePlan. Así que si el usuario pulsa Atrás, tendrá que presionarlo dos veces para volver a MainActivity. Quiero deshacerme de eso por lo que sólo tienen que presionar una vez. Estoy stumped sobre cómo hacer esto sin embargo.
Si establezco DegreePlanActivity en noHistory, no podría presionar Back to it mientras estaba en EditDegreePlan.
- Hacer una actividad particular como actividad de raíz en la pila
- ¿Cómo regresar a la última actividad lanzada al volver a iniciar la aplicación después de presionar HOME?
- Eliminar manualmente las actividades de la pila de aplicaciones para Android
- ¿Dónde está la "herramienta de pila" para el desarrollo de Android? (Para ayudar a depurar código nativo C + +)
- Cómo evitar agregar el mismo fragmento a la pila
He intentado sobrepasar el método onBackPressed y lanzar una intención a MainActivity. El problema entonces es que tienen que pulsar Atrás varias veces para salir de la aplicación entonces.
¿Que debería hacer?
- Tamaño de la pila de Android
- Android: ¿FLAG_ACTIVITY_NEW_TASK tiene efecto dentro del mismo proceso?
- App pierde su capacidad de recordar su pila cuando se inicia desde otra aplicación
- Recursivo + 900 elementos + chequeo de vecinos = causas stackoverflow
FLAG_ACTIVITY_CLEAR_TOP borrar su pila de actividad, puede utilizar el código:
Intent intent = new Intent(this, Activity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent);
Recuerde que esta bandera borra sólo las Actividades Intermedias, por ejemplo, si tiene A, B, C en su Back Stack
luego va de Actividad C a D con esta bandera esto no borra Back Stack
y la Pila sería A, B, C, D, pero si pasas de la actividad D a la actividad A con esta bandera, las actividades B, C, D aparecerán en la pila y solo tendrás A en la pila trasera.
Sugiero que utilice startActivityForResult()
, en lugar de simplemente startActivity()
, cuando inicie la Actividad EditDegreePlan, como se describe en los tutoriales de Android .
En la Actividad de EditDegreePlan usted llama
setResult(RESULT_OK); finish();
Si no esperas ningún dato de EditDegreePlan-Activity, entonces no necesariamente tienes que implementar el onActivityResult
.
Solución simple para API> = 15 a API 23 nombre de actividad del usuario en la intención.
Intent nextScreen = new Intent(currentActivity.this, MainActivity.class); nextScreen.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK); startActivity(nextScreen); ActivityCompat.finishAffinity(currentActivity.this);
Aquí está su flujo:
MainActivity -> DegreePlanActivty -> EditDegreePlan -> DegreePlan -> MainActivty
Anule estos métodos dentro de su "DegreePlan"
public void onBackPressed() { super.onBackPressed(); Intent goToMainActivity = new Intent(getApplicationContext(), MainActivity.class); goToMainActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // Will clear out your activity history stack till now startActivity(goToMainActivity); }
Parece que obtendrás el comportamiento deseado si no especificas ninguna bandera. El botón de vuelta haría lo correcto. Para obtener una actividad cerrada desde su código utilice el método finish()
tiene el mismo efecto que el usuario presionando el botón Atrás. Así que automáticamente llegarás a DegreePlan cuando termines el EditDegreePlan, sin necesidad de llamar a ningún Intents
tampoco.
Utilice esto para despejar la pila:
menuIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_TOP);