Podczas korzystania z FragmentActivity
automatycznie przywraca stan fragmentów i odtwarza wszystkie fragmenty.Sposób automatycznego przywracania fragmentów działa
Wiem, że robi się to głównie zapisując stan w onSaveInstanceState
, a następnie przywracając w działaniu onCreate
. Przyglądając się nieco kodowi, widziałem, że wszystkie fragmenty są odtwarzane (lub dołączane tylko wtedy, gdy retainInstance jest prawdą) i dodane do FragmentManager
, ale nie jest dla mnie jasne, w jaki sposób są one dodawane do widoku, ponieważ widok nie jest automatycznie przywrócony.
Moje oryginalne problemy polegały na tym, że otrzymałem duplikaty fragmentów podobnych do that other question. I workarrounded że onCreate
z:
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
}
Teraz działa, ale jeszcze nie w pełni zrozumieć, jak to działa.
Moje wątpliwości to:
- W którym momencie iw jaki sposób są fragmenty przymocowane do View? Eksperymentowałem, że odtworzenie fragmentu wykonano w
onCreate
zFragmentActivity
. Ale jeśli później zadzwonię pod numersetContentView
, w jaki sposób fragment dołącza się do widoku? - Czy mogę zapobiec odtwarzaniu fragmentów bez nadpisywania
onSaveInstanceState
? Ponieważ z powodu różnych układów orientacji z różną liczbą fragmentów, moim pierwotnym zamiarem było odtworzenie tylko jednego fragmentu stanu oznaczonego jako zatrzymany i nie przywracania innych fragmentów widoku, które nie zostały oznaczone jako zachowane.