Frage

Wie man klärt BackStackEntries in FragmentManager ? Dies ist der Code, mit dem ich mein Fragmentobjekt ändere:

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

In einer bestimmten Situation muss ich die vollständigen Backstack -Einträge entfernen. Ich habe im Fragmentmanager keine bestimmte Methode dafür gefunden. Hast du eine Idee?

War es hilfreich?

Lösung

Ich habe an einer Methode gearbeitet, von der ich denke, dass sie das tut, was Sie tun, aber das einzige, was ich aus der Dokumentation herausfinden konnte Container anzeigen. Grundsätzlich findet es den Eintrag oben im Stapel und löscht alles, einschließlich dieses Eintrags. Wenn jemand anderes glaubt, dass es negative Implikationen gibt, lassen Sie es mich wissen, weil ich sehr neugierig wäre:

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

Andere Tipps

Das funktioniert gut für mich:

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

Sie haben Recht, es gibt keine Möglichkeit, den Stapel so weit zu räumen, wie ich die Dokumentation lesen kann.

Dies ist ein großes Problem. Versuchen Sie, das Problem auf Android's hochzuladen Ausgabe Tracker Und ich hoffe, jemand sieht es an. Ich warte immer noch darauf Mine.

Dies ist ein ziemlicher Hack, aber Sie können versuchen, Ihre zu beenden Activity und wieder anfangen. Es könnte den Stapel klären.

Wenn Sie den gesamten Back -Stapel löschen möchten, liegt wahrscheinlich daran, dass Sie etwas tun werden, das nicht mit dem vorherigen Kontext zusammenhängt. In diesem Fall sollten Sie eine neue Aktivität starten.

Wie ich anfange zu verstehen, werden Aktivitäten mit Fragmenten als Container von Fragmenten funktionieren. Sie sollten versuchen, die Unabhängigkeit zwischen Fragmenten zu halten und sie in Aktivitäten basierend auf ihrem Kontext zu organisieren.

Wenn die jeweilige Situation eintritt, können Sie eine neue Aktivität starten und das gewünschte Fragment für diese neue Aktivität aufstellen, anstatt sie in die alte Aktivität zu legen. Diese neue Aktivität wird den neuen Fragmentestapel erledigen. Auf diese Weise werden Sie auch Ihren Code etwas mehr verkapselt haben, nein?

Schauen Sie sich diese erklärende Antwort an: Reply für Commonsware

ich hoffe es hilft!

Haben Sie PopbackStack () -Anrufe im Fragmentmanager ausprobiert?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top