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.

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?

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); 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.