Si supponga di voler derivare la propria classe View da un'implementazione View esistente, aggiungendo un po 'di valore, mantenendo quindi alcune variabili che rappresentano lo stato della propria vista in modo significativo.Ignora View.onSaveInstanceState() e View.onRestoreInstanceState() utilizzando View.BaseSavedState?
Sarebbe bello se la tua vista salverebbe automaticamente il suo stato proprio come fanno gli altri (se è stato assegnato un ID), quindi vorrai sovrascrivere onRestoreInstanceState()
e onSaveInstanceState()
.
Naturalmente, è necessario chiamare i rispettivi metodi della classe base e è necessario combinare le informazioni di stato con quelle della classe base.
Ovviamente, l'unico modo sicuro per farlo è quello di avvolgere la tua super classe 'Parcelable
in un proprio Parcelable
in modo che le chiavi non vengano confuse.
Ora c'è View.BaseSavedState
e interessa getSuperState()
metodo, ma in qualche modo non riescono a capire come questo realmente aggiunge valore al solo memorizzare la classe base Parcelable
in un Bundle
insieme con i valori dello stato della vista derivata e restituire questo. D'altra parte, forse qualche altro componente del sistema si aspetterà che tutte le informazioni di InstanceState siano di tipo View.AbsSavedState
(ad esempio in modo che sia possibile chiamare getSuperState()
)?
Qualche esperienza che sei disposto a condividere?
Grazie! Non ho mai guardato un codice di esempio in questo caso. Questo ha reso tutto molto più chiaro per me. –
writeToParcel non sembra mai essere chiamato da onSaveInstanceState. Qual è lo scopo? – dylan7
@ dylan7 - Viene chiamato dal framework durante la serializzazione dello stato. –