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

Supongamos que tengo una aplicación que contiene actividades llamadas A, B, C, D. Ahora, considere que A ha sido lanzado como la actividad de raíz y B ha sido lanzado desde A y C ha sido lanzado desde B y D ha sido lanzado desde C. Ahora tengo un botón llamado “Eliminar” en la actividad D. Si supongo, Presiono el botón “Eliminar” en la actividad D, luego la actividad B y la actividad C deben eliminarse de la stack de historial. Al presionar la tecla atrás de la actividad, D debería mostrar la actividad A en lugar de C. No sé cómo implementar esto. ¿Alguien puede ayudarme a resolver este problema?

No estoy seguro de que pueda eliminar directamente las actividades del historial de forma programática, pero si usa startActivityForResult() lugar de startActivity() , dependiendo del valor de retorno de su actividad, puede finish() inmediatamente la actividad predecesora para simular el comportamiento que quieres. Al utilizar este método en todas sus actividades, puede tener este comportamiento en cascada en la stack de actividades para permitirle pasar de la actividad D a la actividad A.

Sé que esta no es su situación, pero en el futuro si sabe antes de comenzar la actividad que no desea que el predecesor permanezca, puede llamar a finish() inmediatamente después de startActivity() .

Consulte la sección llamada “Duración de la nueva pantalla” en Tareas comunes y Cómo hacerlo en Android

Estoy de acuerdo con @RivieraKid, pero pienso en otra forma: cuando presiona “Quitar”, establece un indicador personalizado en verdadero.

Anular el evento de tecla hacia atrás:

 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 un buen inicio de sesión), pero para completar, me gustaría mencionar que también puede establecer el indicador FLAG_ACTIVITY_NO_HISTORY con el objective de hacer 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

Cuando inicias la aplicación. Todas las actividades se lanzan en la misma tarea por defecto. Entonces la stack de respaldo se ve como a continuación.

Tarea: A-> B-> C-> D en este caso, la parte SUPERIOR de la stack posterior apunta a “D”

Ahora, si desea hacer que el punto TOP vuelva a ser “A”. Solo declara el atributo

 android:launchMode="singleTask" 

para la actividad “A” en su AndroidManifest.xml

Ahora cuando presiona el “botón Eliminar” en la actividad “D”, simplemente comience la actividad de la forma habitual como lo hace. La stack posterior se borra de la actividad “B” y “C” y se obtiene un comienzo limpio de la actividad “A”

Recuerde que esto cerrará y destruirá su actividad D de la memoria incluso si no llama a finish() explícitamente en “D”

Creo que esto haría lo que quieras. En el archivo de manifiesto, simplemente agregue el atributo “noHistory” a las actividades “B” y “C” que no desea volver a visitar al presionar el botón Atrás en “D”.

      

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 el onCreate de cada actividad que configura: ActivitiesControl.vAct1 = this;

y onDestroy (): ActivitiesControl.vAct1 = null;

Cuando desee destruir alguna actividad para eliminarla de la stackHistoria, simplemente llame:

ActivitiesContro.vAct1.finish ();

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