2012-09-13 16 views
12

Mi pregunta es un poco diferente a este tipo de pregunta. Necesito eliminar o borrar mi pila de actividades y luego comenzar una nueva actividad. No creo que sea un problema de bandera clear_top. Me explico con un ejemplo:Borrar actividad Apilar e iniciar nueva actividad en android

Mi flujo Actividad:

Login > Home > Screen1 > screen2 .... 

Termino actividad sesión o llamada con la bandera no_history. Así que mis actividades se ven así

Login(finished)> Home [bottom of the stack now] > Screen1 > Screen2[top of the stack] 

que necesito para manejar error de sesión. Si ocurre algún error de sesión en algún punto, necesito volver a la actividad de inicio de sesión. Pero recuerda que no tengo actividad de inicio de sesión en la pila. Así que clear_top no funcionará.

Si ocurre algún error de sesión en la Pantalla 2, entonces necesito borrar la pila completa (pantalla2, pantalla1, inicio) y luego iniciar la actividad de inicio de sesión. De modo que después de que el botón Atrás presione la actividad de inicio de sesión cierre mis aplicaciones.

¿Hay alguna manera de borrar la pila de actividades?

gracias de antemano

+0

Ahora la pregunta es, ¿desea volver a la actividad de inicio de sesión, incluso si no está en la pila, entonces wyh está terminando esa actividad. La segunda pregunta es en qué caso, quieres borrar la pila y regresar. Uno es lo que quiere aclarar con _As de que después de presionar el botón, la actividad de inicio de sesión cerrará mis aplicaciones_. –

+0

Primero: tengo una opción para guardar sesión. Si inicio sesión exitosamente, entonces abre la actividad de INICIO. Según el flujo, cuando presionamos el botón Atrás desde la actividad de INICIO debería cerrar las aplicaciones. Solo el mensaje de salida o el error de sesión puede mostrar la página de inicio de sesión. Segundo: piensa en un sitio web. ¿Qué sucede cuando tu sesión expiró? Redirecciona tu página de inicio de sesión. Quiero hacer exactamente lo mismo. Tengo que cerrar toda mi actividad que necesita permiso de inicio de sesión en la sesión expiró. – shantanu

Respuesta

19

Utilice esta

Intent i = new Intent(yourScreen.this,Home.class); 
     i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     i.putExtra("EXIT", true); 
     startActivity(i); 

y en el onCreate de la clase a casa, haga esto para comprobar,

if (getIntent().getBooleanExtra("EXIT", false)) 
    { 
     Intent i = new Intent(Home.this,Login.class); 
     startActivity(i); 
     finish(); 
    } 

lo que esto esencialmente hacer es sin importa en qué actividad se encuentre, puede llamar a la pantalla de inicio con la bandera superior clara. En la pantalla de inicio hay una condición de verificación en el método onCreate que ayudará a borrar la pila y llevarlo a la pantalla de inicio de sesión. Ahora, en la pantalla de inicio de sesión, si presiona el botón Atrás, saldrá de la aplicación a medida que se borre la pila ..

Avísame si el problema persiste ...

+1

Mi amigo, ¿mi respuesta ha resuelto su consulta? –

+0

Grandes trucos. Primero pensé que generaría parpadeo. Pero después de la prueba funciona muy bien. gracias – shantanu

+3

Me alegro de que te haya ayudado ... Es bueno conocer indios. –

0

uso onActivityResult() para gestionar las actividades en este escenario.

2

Prueba de esto,

termine su actividad actual

 YourCurrentActivity.this.finish(); 
    Intent intent1 = new Intent(YourCurrentActivity.this,LoginActivity.class); 
    intent1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(intent1); 

que funcionará aunque su actividad no está en la pila.

Espero que ayude.

+0

no funciona en este flujo. A (finalizar) -> B -> C (cerrar sesión) -> A. Presionando A hacia atrás, A regresará a B. – topwik

8

Es un poco vieja pregunta, pero tal vez alguien más tropezará con ella mientras busca respuesta a un problema similar.

Usted debe comenzar la actividad Entrar con banderas: Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK - Bandera NEW_TASK puede tener un poco confuso nombre, pero en realidad va a crear nueva tarea solo si no existe (se utilizará la tarea de otro modo actual) - y se CLEAR_TASK despejarlo de todas las actividades anteriores.

Cuestiones relacionadas