8

La mia app ha diversi frammenti e attività. Nel corso del ciclo di vita dell'attività principale del genitore, l'app presenta informazioni/opzioni per l'utente in altre attività.Come gestite le transazioni frammento quando lo stato dell'attività genitore è destinato a essere salvato?

La documentazione per Fragments ha il seguente stipula di commit():

Attenzione: si può commettere una transazione con commit() solo prima le attività, risparmiando il suo stato (quando l'utente lascia l'attività) . Se si tenta di eseguire il commit dopo tale punto, verrà generata un'eccezione. Questo perché lo stato dopo il commit può essere perso se è necessario ripristinare l'attività. Per situazioni in cui va bene che si perde il commit, utilizzare commitAllowingStateLoss().

Il problema è che dopo essere tornati all'attività padre, non posso più usare FragmentTransactions che sono parte integrante del modo in cui ho progettato la navigazione nell'app.

Una soluzione che ho pensato è quello di cambiare le mie attività a frammenti, però la mia app sarà anche eventualmente utilizzare la fatturazione in-app che credo sempre iniziare la propria attività. Questa sembra una enorme restrizione - ad un certo punto dello sviluppo finirò per dover mostrare un'attività separata.

ho potuto probabilmente ottenere via con l'utilizzo di commitAllowingStateLoss(), ma mi sento come mi manca un concetto importante nello sviluppo tablet Android. C'è un modo per iniziare le attività quindi tornare all'attività padre (che gestisce i frammenti) senza perdere la capacità di commettere FragmentTransactions?

+1

La lettura di questo [** post sul blog **] (http://www.androiddesignpatterns.com/2013/08/fragment-transaction-commit-state-loss.html) potrebbe aiutare. –

risposta

3

si può commettere transazioni frammento di nuovo quando l'attività è ripresa genitore/iniziato, anche se è stato messo in pausa precedente. I documenti indicano solo che non è possibile eseguire il commit durante il periodo di tempo in cui l'attività è stata messa in pausa (e lo stato è stato salvato) e prima che sia stato ripreso di nuovo. Se si ritorna all'attività dei genitori dopo aver visitato un'altra attività, si è liberi di utilizzare nuovamente le transazioni frammento dopo che è stato chiamato il numero Activity.onStart().

La ragione di questa limitazione è che Android salva lo stato di frammenti associati ad un attività durante Activity.onSaveInstanceState(). Se provi a eseguire transazioni di frammento dopo questo punto, sarai esposto a una perdita di stato se Android deve ricreare + ripristinare tale attività (poiché le informazioni che utilizza per ricreare lo stato di attività erano solo i dati catturati in Activity.onSaveInstanceState()).

Problemi correlati