2011-09-16 12 views
6

Eventuali duplicati:
Separate Back Stack for each tab in Android using FragmentsAndroid Frammento stato di visualizzazione all'interno di un host scheda

Recentemente ho iniziato a lavorare su una domanda con frammenti all'interno di un host all'interno di una scheda FragmentActivity .. il La documentazione di Android diceva di fare ciò poiché la classe TabActivity ora è deprecata. Per utilizzare i frammenti, sto usando la libreria di supporto di android v4.

Attualmente la mia app consiste in una scheda all'interno della quale esistono i frammenti. Per navigare verso nuovi frammenti all'interno della scheda ho usato il seguente codice (che sembra essere corretto sulla base della documentazione):

FragmentTransaction ft = fragmentManager.beginTransaction(); 
ft.replace(containerId, newFragment); 
ft.addToBackStack(null); 
ft.commit(); 

Tutto andava bene e buona fino a quando ho colpito il tasto Indietro per passare a una precedente frammento e ho capito che tutto il mio stato di visualizzazione era stato praticamente distrutto .. quello che stava succedendo è che il metodo onCreateView() veniva richiamato sul mio frammento precedente anche se le sue viste erano state create precedentemente ... perché questo? Ho cercato su come mantenere correttamente lo stato con i frammenti ma non riesco a trovare documentazione decente su questo.

Cosa Allora ho provato è stato quello di utilizzare la

ft.add(containerId, newFragment); 

invece di

ft.replace(containerId, newFragment); 

Ciò in effetti ha funzionato abbastanza bene in che il mio stato di visualizzazione è stato mantenuto - onCreateView() non è stato chiamato di volta in volta i miei precedenti frammenti sono stati mostrati. Tuttavia, quello che ho iniziato a notare è che potevo interagire con componenti (pulsante, ecc.) Da frammenti precedenti che si trovavano sotto il frammento corrente, anche se non riuscivo a vedere i componenti !? Ho letto da qualche parte che il seguente metodo dovrebbe essere utilizzato per salvare uno stato:

public void onSaveInstanceState (Bundle outState) 

ho implementato questo metodo, tuttavia, non è mai chiamato! Ho anche notato che i bundle passati ai metodi onCreateView() e onActivityCreated() sono sempre nulli. Sicuramente Google non ha reso così difficile realizzare qualcosa del genere e mi manca qualcosa? Qualsiasi aiuto su come mantenere correttamente lo stato di visualizzazione di un frammento sarà molto apprezzato!

Grazie.

+0

Chiunque altro ha provato questo? Per favore aiuto! :) –

+0

OK, quindi sembra che il problema dello stato di visualizzazione non sia un problema quando si naviga tra i frammenti, ma piuttosto quando viene coinvolta un'altra attività ... si veda il bug che ho registrato (edizione 20120): http: // code. google.com/p/android/issues/detail?id=20120 –

risposta

Problemi correlati