¿Cómo borrar una actividad específica del historial de la pila?

Supongamos que tengo una aplicación que contiene actividades denominadas A, B, C, D. Ahora, considerar A se ha puesto en marcha como la actividad de la raíz y B se ha iniciado desde A y C se ha iniciado desde B y D se ha iniciado desde C. Ahora tengo un botón llamado "Eliminar" en la actividad D. Si supongo, Presiono el botón "Eliminar" en la actividad D, entonces la actividad B y la actividad C deben ser eliminados de la pila de historial. Encendido Presionando la tecla de regreso de la actividad D debería mostrar activamente A en lugar de C. No sé cómo implementar esto. ¿Puede alguien ayudarme a resolver este problema?

No estoy seguro de que puede eliminar actividades de la historia de forma programática, pero si utiliza startActivityForResult() lugar de startActivity() , dependiendo del valor devuelto de su actividad, puede finish() inmediatamente finish() la actividad predecesora para simular El comportamiento que desea. Al utilizar este método en todas sus actividades, puede tener este comportamiento en cascada de la pila de actividades para permitirle pasar de la actividad D a la actividad A.

Sé que esta no es tu situación, pero en el futuro si sabes que antes de iniciar la actividad que no quieres que el predecesor permanezca, puedes llamar a finish() inmediatamente después de startActivity() .

Por favor, vea la sección titulada "Vida útil de la nueva pantalla" en Tareas comunes y cómo hacerlo en Android

Estoy de acuerdo con @RivieraKid, pero creo que de otra manera: Cuando presiona "Eliminar" se establece un indicador personalizado a true.

Anular el evento de tecla de retorno:

 public void onBackPressed() { if (!remove){ super.onBackPressed(); }else{ Intent goToA = new Intent((this,ActivityA.class);); goToA.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(goToA); } } 

¿Crees que esto hace lo que quieres?

Buena suerte.

RivieraKid tiene la mejor respuesta (y una conexión genial), pero para completar, quisiera mencionar que también puede establecer el flag FLAG_ACTIVITY_NO_HISTORY en una intención, para que la actividad recién lanzada no aparezca en el historial. Consulte http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NO_HISTORY

Una alternativa es crear una clase para tener acceso a las actividades y cerrarlas. Ejemplo:

Ocupaciones:

  • acto 1
  • Act2
  • Act3

Clase de control:

 public class ActivitiesControl { public static act1 vAct1 = null; public static act2 vAct2 = null; public static act3 vAct3 = null; } 

En la onCreate de cada actividad establecida: ActivitiesControl.vAct1 = this;

Y onDestroy (): ActivitiesControl.vAct1 = null;

Cuando quiera destruir alguna actividad para quitarla de la pilaHistoria que acaba de llamar:

ActividadesContro.vAct1.finish ();

No sé si este es el mejor método, pero es lo que funcionó para mí.

Cuando inicia la aplicación. Todas las actividades se ejecutan en la misma tarea de forma predeterminada. Así que la pila trasera se ve como abajo.

Tarea: A-> B-> C-> D en este caso el TOP de la pila trasera apunta a "D"

Ahora, si desea que el TOP punto de "A" de nuevo. Simplemente declare el atributo

 android:launchMode="singleTask" 

Para la actividad "A" en su AndroidManifest.xml

Ahora, cuando presione el botón "quitar" en la actividad "D", inicie la actividad como de costumbre. La pila trasera se borra de la actividad "B" y "C" y obtiene un inicio limpio de la actividad "A"

Recuerde que esto cerrará y destruirá su actividad D de la memoria aunque no llame a finish() explícitamente en "D"

Creo que esto haría lo que quieras. En el archivo de manifiesto sólo agregue el atributo "noHistory" a las actividades "B" y "C" que no desea volver a revisar al pulsar el botón de retroceso en "D".

  <activity android:name="com.acme.activityA"></activity> <activity android:name="com.acme.activityB" android:noHistory="true"></activity> <activity android:name="com.acme.activityC" android:noHistory="true"></activity> <activity android:name="com.acme.activityD"></activity> 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.