2011-12-22 13 views
5

ho un'attività principale R. Ci sono due scenariClearing pila comprese le attività in diversi compiti

1) Una lancia B. B ha launchmode singleTask ed è lanciato con FLAG_ACTIVITY_NEW_TASK. ora ho un'opzione di menu in B che esegue un'operazione di eliminazione e avvia l'attività A.

2) A lancia B, che si espande C contiene anche l'opzione di menu per eseguire l'operazione di cancellazione.

Voglio che A sia avviato con la cancellazione dello stack in entrambi gli scenari, ma le attività che appartengono ad un'altra attività ancora presenti sono Sono bloccato c'è un modo per cancellare lo stack.

+0

tutte le informazioni sulla gestione del lo stack si trova in: http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html ma 'FLAG_ACTIVITY_CLEAR_TOP' e' clearTaskOnLaunch' potrebbero valere la pena di essere guardati, anche se non fornire il funzionamento esatto che sembri desiderare – Jakar

+0

grazie, ma ho già passato la documentazione non ho trovato alcuna soluzione. – wasaig

+0

FLAG_ACTIVITY_CLEAR_TASK sembra essere l'opzione che non sono sicuro, c'è qualche possibilità di usarlo al livello API 8. – wasaig

risposta

1

provare a utilizzare il seguente codice Attivazione funzionamento mediante eliminazione sia B e C l'attività

Intent intent=new Intent(B.this, A.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(intent); 
+0

FLAG_ACTIVITY_CLEAR_TOP non funziona in questo caso perché ho due attività diverse in esecuzione nella mia applicazione. – wasaig

0

se parlo di tuo secondo scenario allora FLAG_ACTIVITY_TOP_CLEAR sarà chiaro lo stack ..

E il tuo stack ora sarà solo A anziché A-B-C-A.

e nel secondo caso AFAIU il vostro problema si hanno solo due attività A e B, quindi se si vuole riavviare un poi dopo aver riavviato una finitura manuale B.

Spero di avervi dato qualche trucco.

Un'altra cosa se si dispone di attività con launchmode=SingleTask quindi è possibile utilizzare flag_activity_brought_to_front.

That will act like 

A-B-C ad un

0

Perché non finire B e C prima di chiamare un nuovo?

finish(); 
+0

come si può chiamare finish() dell'attività B se si è in attività A? –

0

Il mio metodo non può soddisfare il vostro obiettivo A to be started with clearing the stack, ma quando l'utente sceglie delet opereation e iniziare a B da A di nuovo l'attività che includono A e B saranno ripristinate.

utilizzare il flag FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET per contrassegnare il compito sarà chiaro quando necessario quando si inizia l'attività B da A, quindi se l'utente sceglie delet opereation voce di menu da B o C, è possibile impostare una bandiera, così la prossima volta da A (Una dovrebbe essere la modalità di lancio single_task nel manifesto), si utilizza il flag FLAG_ACTIVITY_RESET_TASK_IF_NEEDED per iniziare a B. questa bandiera cancellerà B e tutto superiore della B.

Spero che questo vi aiuterà a :)

+0

A è in esecuzione nell'attività 1 e B e C sono in esecuzione nell'attività 2. Ora, quando avvio A da B o C, penso che ciò che sta accadendo è che A lasci il suo compito effettivo e diventi parte dell'attività 2. – wasaig

+0

Si dovrebbe fare il avviare la modalità di A come 'singleTask' o impostare flag' FLAG_ACTIVITY_NEW_TASK' in modo che la prossima volta che avvii A, andrà al esistito A. – dreamtale

+0

Ho fatto quello ma quando premo il pulsante indietro vedo B o C presente sul pila. – wasaig