2010-01-22 14 views
47

Ho bisogno di sostituire l'attività corrente con una nuova. Cioè, voglio iniziare una nuova attività e rimuovere l'attività corrente dallo stack delle attività.Sostituire l'attività corrente

In base alla documentazione, sembra il modo migliore sarebbe iniziare l'attività utilizzando Activity.startActivity come al solito, quindi chiamare immediatamente Activity.finish per chiudere l'attività corrente.

È un utilizzo valido di queste API o devo fare qualcos'altro?

risposta

50

Sì. Va bene usare l'api in questo modo.

+3

Fa questo lavoro con startSubActivity? In tal caso, dove viene pubblicato il risultato? – nmr

+1

Per le persone che si interrogano sulla domanda di @ nmr, ciò che ho fatto è avviare la nuova attività per il risultato, quindi chiamare finish() nell'ActivityResult secondo necessità. –

5

provare a utilizzare FLAG_ACTIVITY_TASK_ON_HOME, FLAG_ACTIVITY_NEW_TASK nelle bandiere intenti

24

Il modo corretto per raggiungere questo obiettivo sta usando il seguente:

Intent intent = new Intent(this,MyActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME); 
startActivity(intent); 
this.finish(); 

Il codice presuppone ci si trova in un'attività, altrimenti se si utilizza frammenti utilizzare getActivity()

In questo modo, l'attività viene avviata, si imposta correttamente la gerarchia per il pulsante Indietro, e si distrugge anche l'appropriato mangiato attività.

2

È possibile aggiungere Android: launchMode = "SingleInstance" nella vostra attività, quindi sovrascrivere onNewIntent metodo per aggiornare la data

Riferimento PlayerActivity in ExoPlayer Demo

+0

questa è una cosa veramente utile da fare se si ha una pagina "Home" logico/funzionale e si usa molta navigazione (come un cassetto di navigazione) –