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 pila 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?¿Cómo borrar una actividad específica del historial de la pila?
Respuesta
no estoy seguro de que puede eliminar mediante programación directamente las actividades del historial, pero si se utiliza en lugar de startActivityForResult()
startActivity()
, a continuación, en función del valor de retorno de su actividad, a continuación, puede inmediatamente finish()
la actividad predecesora para simular el comportamiento usted quiere. Al usar este método en todas sus actividades, puede tener este comportamiento en cascada en la pila 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 conoce antes Cuando inicia la actividad que no desea que el predecesor permanezca, puede llamar al finish()
inmediatamente después de startActivity()
.
Por favor, consulte la sección "Tiempo de vida de la nueva pantalla" en Common Tasks and How to do Them in Android
Estoy de acuerdo con @RivieraKid, pero creo que de otra manera: Al pulsar "eliminar" se establece una marca personalizada en true.
anular el evento clave de vuelta:
public void onBackPressed() {
if (!remove){
super.onBackPressed();
}else{
Intent goToA = new Intent((this,ActivityA.class););
goToA.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(goToA);
}
}
¿Cree que esto hace lo que quiere?
Buena suerte.
Creo que esto haría lo que quiera. 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".
<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>
RivieraKid tiene la mejor respuesta (y un inicio de sesión frío), pero está completo, me gustaría mencionar que también se puede establecer el indicador FLAG_ACTIVITY_NO_HISTORY en un intento, para provocar la actividad recién lanzado al no aparecer en la historia. Ver 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:
Actividades:
- ACT1
- ACT2
- ACT3
clase 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 se establece: ActivitiesControl.vAct1 = this;
y onDestroy(): ActivitiesControl.vAct1 = null;
Cuando se quiere destruir alguna actividad para sacarlo de la stackHistory que acaba de llamar:
ActivitiesContro.vAct1.finish();
No sé si este es el mejor método, pero es lo que funcionó para mí.
rly mala idea pérdida de memoria probablemente ocurrirá –
Cuando inicia la aplicación. Todas las actividades se inician en la misma tarea por defecto. Entonces la pila de respaldo se ve como a continuación.
Tarea: A-> B-> C-> D en este caso el principio de la pila de vuelta está apuntando a "D"
Ahora, cuando si usted quiere hacer el punto superior a "A" de nuevo . Sólo declarar el atributo
android:launchMode="singleTask"
para la actividad "A" en su AndroidManifest.xml
Ahora, cuando se pulsa el botón "Eliminar" en la actividad "D" acaba de iniciar la actividad como de costumbre como usted hacer. La pila de vuelta se borra de la actividad "B" y "C" y se obtiene una salida limpia de la actividad "A"
Recuerde esto cerrará y destruir su actividad D de la memoria incluso si usted no llama finish()
explícitamente en "D"
- 1. Borrar toda la pila de historial y comenzar una nueva actividad en Android
- 2. Actividad de inicio y borrar el historial de actividad
- 3. Pila o cola del historial de alarmas?
- 4. volver a una actividad específica
- 5. ¿Cómo se usa Intent.FLAG_ACTIVITY_CLEAR_TOP para borrar la pila de actividades?
- 6. ¿Cómo borrar la pila de actividad anterior y Salir de la aplicación en el botón Atrás?
- 7. ¿Cómo borrar el historial visitado (CSS) de un Android WebView?
- 8. Borrar contenido de archivos del historial de SVN
- 9. Borrar actividad Apilar e iniciar nueva actividad en android
- 10. Abrir la actividad del navegador, pero evitar que esté en el historial de actividad
- 11. ¿Cómo borrar la actividad de volver a la raíz de la pila cuando el usuario abandona la aplicación?
- 12. historial de tiempo de actividad de linux
- 13. ¿Cómo iniciar una actividad con una pestaña específica?
- 14. ¿Cómo borrar la intención que inició la actividad?
- 15. devoluciones de llamada del navegador y la locura de la pila de actividad de Android
- 16. CruiseControl.Net: ¿Cómo se puede borrar un historial obsoleto de compilación?
- 17. Realiza una actividad particular como actividad de raíz en la pila
- 18. ¿Es posible borrar programáticamente el historial de la consola?
- 19. ¿Cómo borrar el historial de búsqueda en Eclipse?
- 20. Enviar una emisión sólo para la actividad específica
- 21. Evitar que WPF Frame guarde el historial en la pila
- 22. Android: borrar el historial al navegar entre Actividades
- 23. sed borrar líneas que no contienen una cadena específica
- 24. Problemas de tamaño de la pila de actividad de Android?
- 25. ¿Terminar cualquier actividad previa en la pila de la actividad actual?
- 26. inserción de Android en la pila de actividad
- 27. ¿Cómo construyes una pila posterior de Android cuando una actividad se inicia directamente desde una notificación?
- 28. cómo insertar la página actual en el historial del navegador
- 29. ¿Cómo elimino una página del historial del navegador?
- 30. Inicie la aplicación de Android con actividad específica
El comentario sobre llamar a finish() inmediatamente después de startActivity() para que la actividad actual no permanezca en la pila es muy útil. Gracias. – dazed