Come richiamare lo stack per Attività con più Frammenti?
Si supponga che ho un'attività che contiene due FrameLayouts (chiamiamoli SeqA e SeqB), che a sua volta ogni contengono un frammento (chiamiamoli FragmentA1 e FragmentB1 rispettivamente). Ora, ho commesso una serie di singole operazioni frammento utilizzando codice simile al seguente ...
getFragmentManager()
.beginTransaction()
.replace(frameId, fragment)
.addToBackStack(null)
.commit();
... tale che sostituisco FragmentA1 in SeqA con FragmentA2, allora sostituisco FragmentB1 in SeqB con FragmentB2, poi ho Sostituisci FragmentA2 in FrameA con FragmentA3, quindi sostituisco FragmentB2 in Frame2 con FragmentB3, e lo stato finale assomiglia all'immagine sopra (dove sono visibili solo FragmentA3 e FragmentB3).
Se ho capito correttamente come funziona il back stack, premendo 'indietro' si alternano i popping dei Fragments tra FrameA e FrameB (riflettendo come li ho aggiunti).
Qualcuno sa se è possibile inserire selettivamente l'ultima transazione su FrameA o FrameB? (Cioè se ho premuto 'Pop SeqA' quindi SeqA sarebbe la transizione di ritorno da FragmentA3 a FragmentA2 e, invece, se ho premuto 'Pop SeqB' quindi SeqB sarebbe la transizione di ritorno da FragmentB3 a FragmentB2)
Supplemento: So che posso ottenere l'ultimo frammento aggiunto a un FrameLayout specificato utilizzando il metodo
FragmentManager.findFragmentById(int framelayoutId)
, ma chiamando loFragmentTransaction.remove(fragment).commit()
rimuove solo il frammento dalla vista e non passa nuovamente la vista al frammento visualizzato in precedenza.
Se FragmentTransaction.remove "rimuove solo il frammento dalla vista e non la transizione View", allora che cosa sta mostrando in la vista? Ma posso capire perché questo potrebbe causare confusione se Mgr conserva una singola pila di frammenti ma non è a conoscenza di quali sono simultaneamente visibili, cioè, come potrebbe sapere che A2 è "sotto" A3 quando B2 potrebbe trovarsi tra di loro sul pila? – gordonwd
Se una vista (FrameLayout nel mio caso) ha aggiunto più Frammenti usando il metodo 'FragmentTransaction.add (int, Fragment)', quindi chiamando 'FragmentTransaction.remove (Fragment) .it()' Credo che lascerà il FrameLayout mostra l'ultima Fragment aggiunta ad essa. Tuttavia, aggiungendo Frammenti alla Vista usando il metodo 'FragmentTransaction.replace (int, Fragment)' (come sto facendo, supponendo che questo sia meglio per la memoria ?!) lascerà il FrameLayout senza figli (cioè mostrando come Vista vuota) ... –
Per aggiungere al mio commento precedente: Vedo che ci sono alcuni metodi utili come 'FragmentManager.getBackStackEntryAt (int index)', 'FragmentManager.popBackStack (String name, int flags) ',' popBackStack (int id, int flags) ',' FragmentTransaction.addToBackStack (String name) 'e' FragmentTransaction.replace (int containerViewId, Fragment fragment, String tag) ', non sono sicuro come riunirli insieme per ottenere quello che mi serve ... –