2011-02-11 11 views
15

Mi pila de actividades es A1 B A2, con A2 en la parte superior.Llevar una actividad al frente usando FLAG_ACTIVITY_REORDER_TO_FRONT

A1 y A2 son instancias de la misma actividad, A. Ahora en A2, quiero que A2 salga y lleve A1 al frente, por lo que la pila final debe ser B A1. ¿Cómo debería implementarlo?

Mi código actual que executs A2 es:

 finish(); 

     intent = new Intent(this, A.class); 
     intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP); 
     startActivity(intent); 

El código anterior trajo B al frente, por lo que la pila final es A1 B, que no es lo que esperaba.

¿Alguna idea?

Gracias.

Respuesta

13

No es posible hacer lo que quiera utilizando los indicadores de Intención.

La razón se debe a la forma en que FLAG_ACTIVITY_REORDER_TO_FRONT funciona. Cuando usa esta bandera, Android busca una instancia de la actividad deseada en su pila de actividades, comenzando desde el frente de la pila y escaneando hasta llegar a la raíz/parte posterior de la pila. Tan pronto como encuentre una instancia de la actividad especificada, la llevará al frente (es decir, si hay varias instancias de la actividad especificada, traerá al frente la instancia más reciente ).

En su caso, la pila de la actividad será similar a:

A1, B, A2 (front of task) 

Al tratar de reordenar su actividad A, Android busca la instancia A2 primero y reordena que al frente de la tarea. Por supuesto, ya estaba al frente de la tarea, así que esto realmente no hace nada.

Por supuesto que ya ha llamado finish() en esta actividad y ha intentado (usando FLAG_ACTIVITY_PREVIOUS_IS_TOP) decirle a Android que no debe considerar la actividad actual mientras decide qué hacer, pero todo esto se ignora. Android ve A2 como la instancia más reciente de la actividad A y la reordena al frente. Luego A2 termina y la actividad B se convierte en el frente de la tarea. El usuario ve "B" y la pila de la actividad es:

A1, B (front of task) 

Tendrá que encontrar otra manera de lograr los resultados deseados (ya que este post es de casi 2 años de edad que se supone que ya ha encontrado otra camino).

+4

Hice una nueva clase extendiendo la clase A. – Kai

+0

Gracias muchas buenas explicaciones – Simcha

-4

Llamas a finish() antes de llamar a startActivity. ¿Cómo crees que se supone que debe comenzar la actividad una vez que haya terminado?

Además, ¿cómo se supone que se debe saber qué instancia de A se debe mostrar al frente?

+7

Puede llamar a 'finish()' y luego continuar trabajando, incluso al iniciar otras actividades. No hay nada de malo en eso. Llamar a 'finish()' no termina la actividad de inmediato, solo le dice a Android que desea que la actividad termine. –

0

En mi aplicación, tengo la misma situación.

Mi solución fue crear una actividad de puesta en marcha invisible, X, que redirige a una

Así que su pila se vería así:

X A1 B A2

En cualquier momento me necesito volver a A1, rebobinar a X (usando FLAG_ACIVITY_CLEAR_TOP), que, a su vez, comenzará A.

Cuestiones relacionadas