Domanda

Come cancellare BackStackEntries in FragmentManager? Questo è il codice che uso per cambiare il mio oggetto frammento:

FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
Fragment homeFragment = new Home();
fragmentTransaction.replace(R.id.mainFragement, homeFragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();

In una particolare situazione ho bisogno di rimuovere le voci backstack completi. Non ho trovato alcun metodo particolare per che nel responsabile di frammento. Avete qualche idea?

È stato utile?

Soluzione

Ho lavorato su un metodo che penso fa quello che si sta chiedendo di fare, ma l'unica cosa che sono stati in grado di capire dalla documentazione è se questo metodo solo svuota la BackStack o se c'è qualche implicazione sul contenitore View. Fondamentalmente, si rileva che la voce si trova in cima alla pila ed elimina tutto, compresa quella voce. Se qualcun altro pensa che non ci sono implicazioni negative fatemelo sapere perché io sarei molto curioso:

public static void clearBackStack(FragmentManager manager){
    int rootFragment = manager.getBackStackEntryAt(0).getId();
    manager.popBackStack(rootFragment, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}

Altri suggerimenti

Questo funziona bene per me:

clearFragments(FragmentManager fm) {
    while (fm.popBackStackImmediate());
}

Hai ragione, non c'è modo di ripulire lo stack per quanto posso leggere attraverso la documentazione.

Questo è un grosso problema. Prova a caricare la questione di Android issue tracker e spero che qualcuno guarda a questo. Sto ancora aspettando per miniera .

Questo è un bel trucco ma si può provare la rifinitura del vostro Activity e iniziare di nuovo. Potrebbe cancellare lo stack.

Se si desidera cancellare tutte pila retro probabilmente è dovuto al fatto che si sta per fare qualcosa che non è legato con il contesto precedente. In questo caso si dovrebbe lanciare una nuova attività.

Come sto cominciando a capire, con frammenti, Attività funzionerà come contenitori di frammenti. Si dovrebbe cercare di mantenere indipendenza tra i frammenti, mentre organizzandoli in attività in base al loro contesto.

Nel tuo caso, quando la particolare situazione si verifica, è possibile avviare una nuova attività e posizionare il frammento desiderato in questa nuova attività, invece di luogo nel vecchio-Activity. Questa nuova attività si occuperà della nuova pila di frammenti. In questo modo si avrà anche il codice di un po 'più incapsulato, no?

Date un'occhiata a questa risposta esplicativo: CommonsWare risposta

Spero che aiuta!

Hai provato popBackStack () chiamate in Fragment Manager?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top