Android - begrenzen Sie die Anzahl der Fragmente im backStack?
Derzeit habe ich eine Tätigkeit, und Fragmente eingefügt werden (Suche, Lied, details, Einstellungen, etc). Implementiert habe ich die Seite basierte Menüführung, also jetzt, als Nebeneffekt, tehre ist kein limit, wie viele Fragmente erhalten, Hinzugefügt, um den Backstack. Gibt es eine Möglichkeit, ich kann das begrenzen der Anzahl der Fragmente, oder entfernen Sie ältere Einträge? Jeder song details fragment zum Beispiel, hat einen empfohlenen song-Liste, und durch die Sie gehen Sie zu einem anderen song-details-fragment. Es ist leicht möglich, 30-Fragmente in den backstack, die, wenn Sie DDMS öffnen, sehen Sie die heap-Größe wird langsam (aber sicher) wächst.
Edit: Eine Sache, die ich wollte versuchen zu tun ist, wenn ein Benutzer auf einen der seitlichen Menü-Optionen, wenn das fragment ist bereits in den backstack versuchen, gehen Sie zurück zu diesem fragment anstelle der Instanziierung eine neue, aber natürlich, wenn ein Benutzer auf eine Song-Details-Seite, dann würde er erwarten, dass Sie "back" drücken würde, ihn zu ergreifen, um das Fragment, so dass wird nicht funktionieren.
Edit 2:
Dies ist mein addFragment Methode (zusammen mit Phil ' s Vorschlag):
public void addFragment(Fragment fragment) {
FragmentManager fm = getSupportFragmentManager();
if(fm.getBackStackEntryCount() > 2) {
fm.popBackStack();
}
fm.beginTransaction()
.replace(R.id.fragment_container, fragment).addToBackStack("")
.commit();
}
Ich habe es gerade ausprobiert, und vorausgesetzt, dass mein Fragment der Geschichte ist: Ein->B->C->D, zurück aus D, B geht->A->beenden.
Ich ging nur 8 Ebenen tief zu testen: Ein->B->C->D->E->F->G>H, und geht wieder aus H, passiert dasselbe: H->B->A->beenden.
Alle Fragmente werden immer Hinzugefügt, dass die oben genannte Methode. Was ich gern sehen würde ist: H->G>F->beenden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie programmgesteuert Steuern der Anzahl der Fragmente in Ihrem BackStack:
Einfach überprüfen, wie viele Fragmente es gibt in Ihrem Backstack und entfernen, wenn es einen "überlauf".
Wenn Sie wollen das entfernen spezifischer Fragmente aus dem BackStack, müssen Sie der Umsetzung Ihrer eigenen BackStack und überschreiben onBackPressed(). Da das Fragment BackStack ist ein Stapel (wie der name schon sagt), nur das oberste element (die letzten Hinzugefügt) entfernt werden kann, gibt es keine Möglichkeit des Entfernens der Fragmente in zwischen.
Können Sie zum Beispiel verwenden
realisieren Sie Ihre eigenen stack. Einfach hinzufügen und entfernen von Fragmenten aus, die "stack" (es ist nicht wirklich ein Stapel mehr), Wann immer Sie wollen und behandeln Sie das laden der vorherigen Fragmente, die durch überschreiben der onBackPressed () - Methode.
Dies ist eine alte Frage, aber meine Antwort kann jemand helfen.
Warum nicht überprüfen, ob das fragment ist in die Stapel-und pop-es? Auf diese Weise würden Sie nicht haben, um sorgen mit back-stack-Größe (es sei denn, Sie haben eine Menge von Fragmenten).