2012-07-06 17 views
6

Vorrei modificare la pila avanti nella mia applicazione Android in quanto tale:modifica dello stack di nuovo in Android

In questo momento, ecco il flusso:

A -> B -> C -> D -> E -> F

Voglio essere in grado di modificare lo stack posteriore, in modo che quando l'utente passa all'attività F, D ed E vengono cancellati dalla pila. quindi il flusso è F -> C se l'utente colpisce la parte posteriore.

Inoltre, da F, l'utente può andare all'attività B, questo dovrebbe cancellare anche C, D, E e F.

Ho visto alcune informazioni sulla possibilità di cancellare lo stack, o rimuovere l'elemento in alto, ma voglio rimuovere un certo numero di elementi dallo stack, quando un'attività viene attivata.

Qualsiasi aiuto è apprezzato, grazie mille.

risposta

9

È possibile creare un intento con la bandiera intent.FLAG_ACTIVITY_CLEAR_TOP da F a C. Quindi sarà necessario chiamare startActivity() con l'intento e attivare questa operazione suBackPressato o qualcosa di simile.

Intent i = new Intent(this, C.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP); 
startActivity(i) 

Vai a questa risposta, che si occupa anche di garantire che C non verrà riavviato quando si naviga di nuovo esso: https://stackoverflow.com/a/11347608/1003511

Cosa FLAG_ACTIVITY_CLEAR_TOP farà fare è andare tornare al più recente esempio di attività C in pila e quindi cancellare tutto ciò che è sopra di esso. Tuttavia, ciò può causare la creazione dell'attività. Se si desidera assicurarsi che sia la stessa istanza dell'attività, utilizzare anche FLAG_ACTIVITY_SINGLE_TOP. Dalla documentazione:

L'istanza attualmente in esecuzione dell'attività B nel precedente esempio né ricevere il nuovo intento si avvia qui nel suo metodo onNewIntent(), oppure essere sé finito e riavviato con il nuovo intento. Se ha dichiarato che la sua modalità di avvio è "multiplo" (il valore predefinito ) e non hai impostato FLAG_ACTIVITY_SINGLE_TOP nello stesso intento , allora sarà terminato e ricreato; per tutte le altre modalità di lancio o se è impostato FLAG_ACTIVITY_SINGLE_TOP, questo Intent sarà consegnato all'istanza corrente suNuovaIntent().

Edit: Ecco un esempio di codice simile a quello che si vuole fare:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     Intent a = new Intent(this, C.class); 
     a.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP); 
     startActivity(a); 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 

codice sorgente di esempio: https://stackoverflow.com/a/9398171/1003511

+0

Questo è stato perfetto. Grazie mille per l'aiuto. – mwrazam

2

Quello che ti serve è android:excludeFromRecents="true" che deve essere aggiunto nel tag Activity nel file manifest. Interrompe tutte le attività per andare sullo stack che ha questo tag nel tag Activity in manifest.

codice di esempio

<activity 
      android:name="com.xx.xx.ActivityName" 
      android:excludeFromRecents="true" 


     </activity> 

e fare in modo che si chiama finish() (dopo l'avvio di un'altra attività) Metodo in quelle attività che non si vuole essere sulla pila di attività.

+0

Ciao, questo renderebbe l'attività del tutto scomparire dalla storia che isn è quello che voglio Voglio che l'attività scompaia solo dopo che è stata sparata una certa altra attività. Grazie per l'aiuto! – mwrazam

Problemi correlati