Ho frammenti che tengo nel backstack di FragmentManager. Ogni stato frammento è salvata per cambiamenti di orientamento con le variabili membro, in questo modo, per esempio:Utilizzo di onSaveInstanceState con frammenti nel backstack?
@Override
public void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
outState.putLong("userId", mUserId);
outState.putString("username", mUsername);
}
mio problema è che se c'è un cambiamento di orientamento, dal momento che ogni frammento nel backstack viene chiamato via onSaveInstanceState, ottengo un null eccezione puntatore perché le variabili membro non esistono più.
Qualche idea su come risolvere questo?
puoi fornire il tuo messaggio di errore logcat? –
onSaveInstanceState viene chiamato prima che venga applicata la modifica effettiva, quindi le variabili dovrebbero esistere quando le chiamate, a meno che non siano nulle a causa di altri errori nel codice. Pubblica un altro codice insieme al modulo di output degli errori Logcat. – Shade
Posso assicurarti che le mie variabili vanno bene. Penso che il problema è che i miei frammenti nel backstack non stanno ricevendo onSaveInstanceState quando vengono abbattuti; onSaveInstanceState viene chiamato solo quando l'attività viene distrutta, ma le mie variabili non esistono più. Quindi la mia attuale soluzione è: "if (mUserId! = Null && mUsername! = Null) ...". Non è carino, ma risolve il problema. Trovo strano avere un metodo onSaveInstanceState per i frammenti se non viene chiamato quando il frammento viene rimosso. –