2010-04-27 8 views

Respuesta

2

Esto puede ser posible mediante el uso de variables estáticas. Me gusta usar una variable booleana nombre_actividad_dirty = false; marque esto como verdadero tan pronto como ocurra su condición de invalidación de esa actividad en particular. Entonces, cuando llame a esta actividad, compruebe el estado de activity_name_dirty. Puede usar los Indicadores de actividad para crear un nuevo instante como se describe en Activity Fundamentals

3

Puede usar el indicador de Intento FLAG_ACTIVITY_CLEAR_TOP para reiniciar una actividad de la pila y borrar todo lo que estaba sobre ella. Esto no es exactamente lo que estás preguntando, pero podría ser útil.

Para ello, utilice:

Intent intent = new Intent(context, classToBeStarted.class); 
intent.setFlag(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(intent); 
+0

estoy teniendo el mismo problema. Primero empiezo las actividades A, B y C. Luego comienzo la actividad D con el conjunto Intent.FLAG_ACTIVITY_CLEAR_TOP. Esto debería hacer que D sea la única actividad en la pila, ¿verdad? De alguna manera, este no es el caso, porque cuando presiono el botón Atrás, vuelvo a una de las actividades anteriores. – neu242

+2

No, así no es como funciona CLEAR_TOP. CLEAR_TOP elimina todo lo que está "por encima" de la actividad objetivo en la pila. Entonces, si tienes A, B, C y luego comienzas A otra vez con CLEAR_TOP, entonces mueren B y C.Si comenzó D o reinició C, no pasaría nada. Por eso dije que no era exactamente lo que estaba pidiendo, pero puede ser útil. Por ejemplo, si tiene una pantalla de menú principal que será la actividad raíz, puede relanzarla con CLEAR_TOP cada vez que el usuario regrese a ella para matar a todo lo demás. –

+0

Entonces, para lograr lo que quería, podría hacer algo como esto: 1) Iniciar A, B, C. 2) Iniciar A con CLEAR_TOP y algunos datos que identifican D. 3) En A, finalizar llamada() y comenzar D Se siente como un hack sucio, pero debería funcionar ...? – neu242

25

Sé que esta respuesta puede ser tarde, pero aún así la publicaré en caso de que alguien esté buscando algo como esto.

Lo que hice es declaré un controlador estático en en ACTIVITY_A

public static Handler h; 

y en mi método onCreate() para ACTIVITY_A, tengo

h = new Handler() { 

     public void handleMessage(Message msg) { 
      super.handleMessage(msg); 

      switch(msg.what) { 

      case 0: 
       finish(); 
       break; 

      } 
     } 

    }; 

Ahora, de cualquier actividad después de éste, tales como ACTIVITY_B, o ACTIVITY_C Puedo llamar al

ACTIVITY_A.h.sendEmptyMessage(0); 

que luego llama a finish() en ACTIVITY_A y ta-da! ACTIVITY_A ha terminado de una actividad diferente.

+1

Tenga en cuenta que en este caso el objeto controlador estático guardará referencia a Activity_A. Puede filtrar toda Activity_A. – Robert

+1

pero no puedes hacer eso. finish() no es estático. una función estática no puede llamar a una función no estática. Estoy confundido. – dariusiv

3

Así que cansado de esto, pero no funcionó después de que hiciera una prueba más profunda (lo dejo aquí por referencia en el futuro): android:clearTaskOnLaunch

Supongamos, por ejemplo, que alguien pone en marcha la actividad P de la casa pantalla, y de allí pasa a la actividad Q. El usuario sigue presionando Inicio, y luego regresa a la actividad P. Normalmente, el usuario vería la actividad Q, ya que eso es lo último que hacían en la tarea de P. Sin embargo, si P establece este indicador como "verdadero", todas las actividades que se encuentran encima de él (Q en este caso) se eliminaron cuando el usuario presionó Inicio y la tarea pasó al segundo plano. Entonces, el usuario solo ve P cuando vuelve a la tarea.

https://developer.android.com/guide/topics/manifest/activity-element.html

ACTUALIZACIÓN Esto funcionaba

Intent intent = new Intent(this, MyActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK); 
this.startActivity(intent); 
+0

Funciona muy bien, sin embargo, en mi caso, tuve que usar 'intent.addFlags (..)' – gnB

Cuestiones relacionadas