È possibile utilizzare lo standard savedInstanceState()
per salvare lo stato quando si rimuove un frammento, quindi ripristinare lo stato quando si espelle il frammento dallo stack posteriore? Quando ripristino il frammento dallo stack posteriore, il pacchetto savedInstanceState è sempre nullo.savedInstanceState durante il ripristino del frammento dallo stack posteriore
Al momento, il flusso dell'app è: frammento creato -> frammento rimosso (aggiunto allo stack posteriore) -> frammento ripristinato dallo stack posteriore (il pacchetto salvatoInstanceState è null).
Ecco il codice rilevante:
public void onActivityCreated(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle bundle = getArguments();
Long playlistId = bundle.getLong(Constants.PLAYLIST_ID);
int playlistItemId = bundle.getInt(Constants.PLAYLISTITEM_ID);
if (savedInstanceState == null) {
selectedVideoNumber = playlistItemId;
} else {
selectedVideoNumber = savedInstanceState.getInt("SELECTED_VIDEO");
}
}
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(Constants.SELECTED_VIDEO, selectedVideoNumber);
}
Credo che il problema è che non è mai onSavedInstanceState()
chiamato quando viene rimosso e di essere aggiunto alla parte posteriore dello stack. Se non posso usare onsavedInstanceState(), c'è un altro modo per risolvere questo problema?
Molte grazie :) Il suo risolto il problema –
non sono sicuro che sia una buona idea. Questo vanifica lo scopo di distruggere la vista per liberare memoria se si salva un riferimento ad esso? – craigrs84
In realtà non sono sicuro, perché non ho eseguito test diretti. Tuttavia, il mio pensiero va così.Quando si inizializzano tutti gli elementi nel proprio layout, è normale impostare la maggior parte di questi elementi come variabili globali, quindi se nell'esempio precedente non potrei riciclare la Vista di base a causa del riferimento, Android non sarebbe in grado di riciclare una qualsiasi di queste viste, portando così allo stesso problema con la memoria. – AllDayAmazing