Questa è una soluzione molto semplice per SupportFragmentManager
. FragmentManager
non è così conveniente, ma ancora efficace:
List<Fragment> fragmentList = getSupportFragmentManager().getFragments();
// You might have to access all the fragments by their tag,
// in which case just follow the line below to remove the fragment
if (fragmentList == null) {
// code that handles no existing fragments
}
for (Fragment frag : fragmentList)
{
// To save any of the fragments, add this check
// a tag can be added as a third parameter to the fragment when you commit it
if (frag.getTag().equals("<tag-name")) {
continue;
}
getSupportFragmentManager().beginTransaction().remove(frag).commit();
}
o, se si è costretti a usarlo (ma non consigliato):
.commitAllowingStateLoss();
Se si sta rimuovendo tutti i frammenti la vista più volte, si potrebbe considerare di verificare se il fram corrente è nullo o isDetached()
o isRemoving()
o si potrebbe ottenere un NullPointerExceptions
.
Aggiornamento 6-9-15: La documentazione per getSupportFragmentManger().getFragments()
è apparentemente hidden ora, ma funziona ancora bene nel mio codice. Ecco lo screenshot della documentazione:
Aggiornamento 8-3-15: Se non si utilizza la libreria di supporto per i frammenti, non v'è, purtroppo, non getFragments()
a disposizione, ma ci sono ancora un paio , più scomodo, opzioni.
- Dare ad ogni
fragment
un tag
o id
momento della creazione e iterare attraverso di loro per elaborare ciascun fragment
lo desideri.
- creare un listener utilizzando
onAttachListener
così ogni volta che un nuovo fragment
è attaccato al activity
, è possibile memorizzare che fragment
, e poi iterare che la struttura dei dati per elaborare ogni fragment
, se lo desideri.
Quando non si utilizza il getSupportFragmentManager()
, per elaborare una transazione è necessario utilizzare getFragmentManager()
.
Potete fornire il collegamento al metodo 'getFragments()'? –
@IvanBlack, a quanto pare non c'è nessun collegamento disponibile. Sono certo che la documentazione fosse disponibile per questo articolo quando ho scritto questo post, ma l'API mostra che è nascosta, pensava che funzionasse ancora. – craned