2012-11-24 13 views
6

Ho bisogno di eseguire del codice ogni volta che un frammento viene visualizzato all'utente.Frammenti Android: metodo del ciclo di vita * sempre * chiamato quando viene visualizzato il frammento?

Guardando attraverso l'API il metodo di aggancio più vicino che potrei vedere per questo è su Riduci. Tuttavia, dal debugging tramite il mio codice sembra che onResume sia non chiamato quando l'utente seleziona il pulsante Indietro per tornare a un frammento visualizzato in precedenza.

Giusto per chiarire il comportamento che sto vedendo:

Ho un attivita 'genitore' che configura le schede in un ActionBar ... e 2 frammenti F1 e F2.

L'utente seleziona una scheda e F1 viene caricato nell'attività. Premendo un pulsante, l'utente può navigare su F2. Questa non è una scheda separata ... F2 viene scambiato nel layout.

Aggiunta dichiarazioni di registro, posso vedere che quando l'utente seleziona il pulsante indietro F2, succede ....

1) onPause() viene chiamato su F2. 2) F1 viene caricato in attività ... ma onResume() in F1 è non chiamato

Non ci sono errori nei log in questo momento.

Qualche idea su cosa sto facendo male qui?

Grazie in anticipo,

Neil.

+0

Si dovrebbe sempre pubblicare il codice pertinente in modo che possiamo vedere cosa sta succedendo. Aggiungi ciascun frammento allo stack posteriore? – Sam

+0

Grazie Sam. Durante la modifica della mia domanda e l'aggiunta del codice, ho notato che il mio errore era nel mio codice di commutazione del frammento. Ho aggiunto una risposta che spiega. Saluti. – Neil

risposta

9

Ok, sembra che questo era pilota errore. Il mio codice originale per passare tra i frammenti in un'attività era ....

public void switchFragment(Fragment newFragment, String tag) { 
    getSupportFragmentManager() 
      .beginTransaction() 
      .add(android.R.id.content, newFragment) 
      .addToBackStack(tag) 
      .commit(); 
} 

La chiamata a add() nel codice di cui sopra dovrebbe in realtà essere di sostituire(). Sembra che non rimpiazzare il frammento nei problemi di attività con il comportamento del pulsante back.

Devo essere onesto e ammettere che non sono sicuro al 100% esattamente perché questo accada. Tuttavia, dopo aver apportato la modifica, viene chiamato il metodo onResume() sul frammento di destinazione, una volta che viene chiamato il pulsante back.

+4

così hai downvoted la mia risposta perché hai sbagliato? Che bello ... –

+20

Non ho la reputazione richiesta per il downvote. Avrei davvero svalutato te, esclusivamente per il valore comico dell'errore ortografico "RTFM". – Neil

+6

Gioca simpaticamente ai bambini. – Sandy

1

Questa domanda un po 'strana, perché qualsiasi metodo di classe esistente è garantito per essere chiamato quando si verifica che questo determinato metodo è stato progettato per essere chiamato e tutte le condizioni sono soddisfatte. Scegli quelli che meglio si adattano al compito che vuoi ottenere. Vedere docs here

enter image description here

+6

Questa è una risposta un po 'strana in quanto, nella tua fretta di essere intelligente, ovviamente non hai mai letto la mia domanda. E ho fatto "RTFM" (presumo che sia quello che intendevi) e il "manuale" non mi ha aiutato. Come ho spiegato, non esiste un metodo del ciclo di vita che possa essere garantito che venga richiamato quando un frammento viene restituito, tramite una pressione del pulsante Indietro. – Neil

+1

quale elemento di diagramma incluso nella mia risposta non è chiaro? –

+6

Tutto il diagramma è chiaro, in quanto fa parte del javadoc di Android - tuttavia, non risponde alla mia domanda. – Neil

Problemi correlati