2013-05-20 15 views
9

Nella mia applicazione c'è un FrameLayout su cui sto aggiungendo vari frammentiFragmentManager sostituire vs Aggiungere

FragmentManager fm = getSupportFragmentManager(); 
FragmentTransaction ft = fm.beginTransaction(); 
ft.replace(R.id.fragment_content, fragment, fargmentTag); 
ft.commit(); 

Ora sembra quando uso il ft.replace(R.id.fragment_content, fragment, fargmentTag); e poi in altri luoghi chiamano

getSupportFragmentManager().findFragmentByTag(fargmentTag); 

I sempre ottenere null.

Tuttavia se uso add anziché replace questo problema viene risolto, ma un altro problema sembra che ogni frammento è aggiunto OnTop dell'altro frammento e posso vedere gli altri frammenti di seguito.

Preferirei utilizzare replace, ma ho bisogno dello stato del frammento salvato. Inoltre da notare che non sto usando addToBackStack.

risposta

1

Hai semplicemente risposto alla tua domanda. Utilizzare addToBackStack().

+0

risolverà il problema? – user1730789

+0

Provalo, ma sì, dovrebbe. – Ahmad

3

Prova questa e che avrebbe funzionato.

FragmentManager fm = getSupportFragmentManager(); 
FragmentTransaction ft = fm.beginTransaction(); 
ft.replace(R.id.fragment_content, fragment, fragmentTag); 
ft.commitAllowingStateLoss(); 
+0

Qual è la differenza tra commit e commitAllowingStateLoss() e funzionerà senza la parte addToBackStack del codice? – user1730789

+1

La differenza è quando si desidera mantenere lo stato che si usa commitAllowingStateLoss() [Normalmente, il tuo stato viene perso durante il cambio di orientamento] e alla tua seconda domanda funzionerebbe. – Thalaivar

+0

ok. Grazie. Non ho il codice, con me, ma ci proverò. – user1730789

-1

FragmentManager: fm = getSupportFragmentManager();fm.executePendingxxxx, provalo.

+0

Ricordare eseguire dopo il commit –

Problemi correlati