Sono davvero confuso con lo stato interno di un frammento. Possiedo un'attività che trattiene un solo frammento in una sola volta e lo sostituisce se viene visualizzato un altro frammento. Dai documenti onSaveInstanceState
si chiama SOLO se viene richiamata l'attività onSaveInstanceState
(che nel mio caso non viene chiamata).Come funziona `onViewStateRestored` da Fragments?
Se interrompo il mio frammento, memorizzerò il suo stato all'interno di un Singleton (sì, so che odio anche Singletons, ma non era mia intenzione farlo). Quindi devo ricreare l'intero ViewHirarchy
, creare nuove viste (utilizzando la parola chiave new
), ripristinarne lo stato e restituirle in onCreateView
. Ho anche una casella di controllo all'interno di questa vista dalla quale faccio esplicitamente NON voglio memorizzare il suo stato.
Tuttavia il FragmentManager
vuole essere "intelligente" e chiede onViewStateRestored
con un fascio Non mi sono mai creato, e "ripristina" lo stato del vecchio CheckBox
e lo applica a mia nuova casella di controllo. Questo solleva così tante domande:
Posso controllare il pacchetto da onViewStateRestored
?
In che modo FragmentManager assume lo stato di un CheckBox (probabilmente con raccolta dei dati inutili) e lo applica a quello nuovo?
Perché solo salvare lo stato della casella di controllo (non di TextViews ??)
Quindi, per riassumere: Come funziona onViewStateRestored
lavoro?
nota che sto utilizzando Fragmentv4, in modo che nessun API> 17 richiesto per onViewStateRestored