2011-02-11 9 views
8

Il mio stack di attività è A B C, con C in alto. A iniziato B usando startActivityForResult().FLAG_ACTIVITY_CLEAR_TOP e onActivityResult

Ora, in C, inizia A e cancella la parte superiore utilizzando il seguente codice:

 finish(); 

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

La mia domanda è, sarà onActivityResult() in un essere chiamato dopo che il codice di cui sopra viene eseguito? Mi aspettavo che lo fosse, perché B viene distrutto dopo che C inizia A e cancella la cima. Ma il mio codice di test ha mostrato che onActivityResult() in A non è stato chiamato. Sono confuso. Qualcuno può aiutare?

Grazie.

+0

Kai, i documenti per CLEAR_TOP dicono "tutte le altre attività su di esso verranno chiuse e questo intento sarà consegnato alla vecchia attività (ora in cima) come un nuovo intento. " Tuttavia, sospetto che "chiuso" sia una scelta scadente di parole nel documento .. Android di solito non "chiude" le attività a meno che la memoria lo richieda o chiamino finish(). Questo potrebbe richiedere alcuni test .. Sono interessato a vedere ciò che trovi. – DJC

risposta

3

Nel codice si inizia una nuova attività A, da ACTIVITY C. Questo non chiamerà onActivityResult. Questo semplicemente perché è stata avviata una nuova attività A A. onActivityResult() verrà chiamato solo quando si termina() la propria Aficit B.

Spero che qualcuno aggiunga altro agli anwser, se questo non lo rende chiaro.

+0

onActivityResult() sarà "Chiamato quando un'attività avviata termina, dandovi il codice di richiesta con cui è stata avviata, il risultatoCodice restituito e tutti i dati aggiuntivi da esso.Il risultatoCodice sarà RESULT_CANCELED se l'attività ha restituito esplicitamente che, didn ' t restituisce qualsiasi risultato o si blocca durante la sua operazione. "Il doc non ha detto onActivityResult() dipende da finish(). – Kai

+0

praticamente puoi uscire dall'attività chiamando il finish(). E questo è ciò che significa il doc come capisco. E chiamando Attività A dall'attività C con CLEAR TOP creerai di nuovo l'attività A, a meno che l'attività A non abbia la modalità di avvio impostata su SINGLE TOP. Quindi penso che quello che vuoi non sia posible ... E ti aggiorni se trovi una soluzione a questo. Grazie – Varun

0

prova a impostare il metodo di avvio della tua attività A sul valore "singleTask", oppure usa il tuo flag FLAG_ACTIVITY_CLEAR_TOP in congiunzione con FLAG_ACTIVITY_NEW_TASK. per impostazione predefinita, LaunchMode di Activity A è standard, quindi verrà creata una nuova istanza di A quando si avvia A da C.

Problemi correlati