Quando si utilizza FragmentActivity
ripristina automaticamente lo stato dei frammenti e ricrea tutti i frammenti.Funzionamento del ripristino automatico dei frammenti
So che questo viene fatto principalmente salvando lo stato in onSaveInstanceState
e quindi ripristinato in attività onCreate
. Guardando un po 'sul codice ho visto che tutti i frammenti vengono ricreati (o allegati solo se retainInstance è true) e aggiunti allo FragmentManager
ma non mi è chiaro in che modo vengono aggiunti alla vista, perché la vista non è ripristinato automaticamente.
I miei problemi iniziali erano di ottenere duplicati di alcuni frammenti simili a that other question. ho workarrounded che in onCreate
con:
Fragment f = fm.findFragmentByTag(tagName);
if(f==null) {
f = createFragment();
fm.beginTransaction().add(R.id.myContainer,f,tagName).commit();
} else {
//Nothing it's on the view
}
Ora funziona, ma continua a non capire completamente come funziona.
I miei dubbi sono:
- In quale momento e in che modo sono frammenti attaccati al View? Ho sperimentato che il restauro dei frammenti viene eseguito in
onCreate
diFragmentActivity
. Ma se chiamosetContentView
dopo, come il frammento si collega alla vista? - È possibile impedire la ricreazione dei frammenti senza sovrascrivere
onSaveInstanceState
? Perché a causa di diversi layout di orientamento con diverso numero di frammenti la mia intenzione originale era quella di ricreare solo un frammento di stato contrassegnato come conservato e non ripristinare gli altri frammenti di vista che non sono contrassegnati come conservati.