2013-03-19 12 views
7

Ho 4 attività Android. Chiamiamoli A, B, C, D.Rimuovere le attività 2 e 3 dal back stack all'avvio dell'attività 4

Il flusso normale è A => B => C => D. Tuttavia, quando inserisco D Voglio rimuovere B e C dallo stack posteriore.

È risolvibile?

Si noti che se l'utente è in C e preme di nuovo, dovrebbe essere ancora visualizzata B!

Modifica: L'attività di avvio A di nuovo con CLEAR_TOP ha richiamato nuovamenteCrea su Attività A che non desidero. Qualche altra soluzione?

risposta

-1

FLAG_ACTIVITY_CLEAR_TOP cancellare il vostro stack di attività, è possibile utilizzarlo come i codici di seguito:

intent = new Intent(this, YourActivity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
StartActivity(intent); 
+0

Grazie. Era troppo facile :) – Sunkas

+0

Per la tua risposta era un po 'confuso. Ma YourActivity è ** A ** nel mio caso e chiamato suBackPressed() in Activity ** D **. – Sunkas

+0

In questo modo, onCreate viene richiamato di nuovo sull'attività ** A ** che non desidero. Voglio che venga mostrato lo stato in cui si trovava, in modo simile al comportamento standard quando si fa clic su Indietro. – Sunkas

3

So che questa è una vecchia domanda, ma di recente ho avuto lo stesso problema e non ho potuto trovare una soluzione da nessuna parte. L'unica soluzione che ho potuto ottenere al lavoro è un po 'di hack:

Inizio C da B utilizzando startSubActivity.

Intent intent=new Intent(this,C.class); 
startActivityForResult(intent,REQUEST_CODE); 

In attività C, creare l'intento di attività D e impostarlo come risultato:

Intent intent=new Intent(this,D.class); 
setResult(RESULT_OK,intent) 
finish(); 

In attività B, finitura e avviare l'intento tornato da attività C:

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode==REQUEST_CODE) { 
     finish(); 
     startActivity(data); 
    } 
} 

A questo punto, entrambi attività B e C sarà finito e la pila attività saranno A => D

Problemi correlati