2012-07-06 16 views
6

me gustaría modificar la pila de nuevo en mi aplicación Android como tal:Modificación de la pila de nuevo en Android

En este momento, aquí está el flujo:

A -> B -> C -> D -> E -> F

Quiero ser capaz de modificar la pila posterior, de modo que cuando el usuario vaya a la actividad F, D y E se borren de la pila. entonces el flujo es F -> C si el usuario golpea la parte posterior.

Además, desde F, el usuario puede ir a la actividad B, esto debería borrar C, D, E y F también.

He visto información sobre cómo borrar la pila o eliminar el elemento superior, pero quiero eliminar una cantidad de elementos de la pila cuando se activa una actividad.

Se agradece cualquier ayuda, muchas gracias.

Respuesta

9

Puede construir un intento con la bandera intent.FLAG_ACTIVITY_CLEAR_TOP de F a C. Luego deberá llamar a startActivity() con la intención y hacer que esto ocurra enBackPressed o algo similar.

Intent i = new Intent(this, C.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP); 
startActivity(i) 

Ver esta respuesta, que también se ocupa de asegurar que C no se reiniciará cuando se desplaza de nuevo a él: https://stackoverflow.com/a/11347608/1003511

Lo FLAG_ACTIVITY_CLEAR_TOP va a hacer es ir volver a la última instancia de la actividad C en la pila y luego borrar todo lo que está sobre ella. Sin embargo, esto puede causar que la actividad se vuelva a crear. Si desea asegurarse de que será la misma instancia de la actividad, use FLAG_ACTIVITY_SINGLE_TOP también. A partir de la documentación:

La instancia actualmente en ejecución de la actividad B en el ejemplo anterior o bien recibir el nuevo intento usted está comenzando aquí en su método onNewIntent(), o ser en sí terminado y reinicia con el nuevo intención. Si ha declarado que su modo de lanzamiento es "múltiple" (el predeterminado ) y no ha configurado FLAG_ACTIVITY_SINGLE_TOP en el mismo intento , entonces se terminará y se volverá a crear; para todos los demás modos de inicio o si se establece FLAG_ACTIVITY_SINGLE_TOP, este Intent será entregado a la instancia actual onNewIntent().

Editar: Aquí está un ejemplo de código similar a lo que quieres hacer:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     Intent a = new Intent(this, C.class); 
     a.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP); 
     startActivity(a); 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 

código fuente de ejemplo: https://stackoverflow.com/a/9398171/1003511

+0

Esto fue perfecto. Muchas gracias por la ayuda. – mwrazam

2

Lo que necesita es android:excludeFromRecents="true" que debe agregarse en la etiqueta de actividad en el archivo de manifiesto. Detiene todas las actividades para ir a la pila que tiene esta etiqueta en la etiqueta de actividad en manifiesto.

código Ejemplo

<activity 
      android:name="com.xx.xx.ActivityName" 
      android:excludeFromRecents="true" 


     </activity> 

y asegúrese de que usted llama finish() (después de comenzar otra actividad) método en aquellos actividad que no desea estar en la pila actividad.

+0

Hola, esto haría que la actividad desaparecer por completo de la historia, que ISN No es lo que quiero. Quiero que la actividad desaparezca solo después de que se active otra actividad determinada. ¡Gracias por la ayuda! – mwrazam

Cuestiones relacionadas