Android Fragment-Backstack löschen, ohne zu knallen?

Wir haben eine Aktivität, die ein SlidingMenu enthält (https://github.com/jfeinstein10/SlidingMenu), bei denen es drei Möglichkeiten gibt, nennen wir sie A, B1, C1. Diese entsprechen Fragmenten, die wir in der Aktivität zeigen. Wenn Sie im SlidingMenu eine andere Option auswählen, ersetze ich das aktuelle Fragment über den FragmentManager durch das neue.

Von Fragment B1 können Sie zu zwei anderen gehen, nennen wir sie B2 und B3. Hier soll die Zurück-Taste Sie von B2 -> B1 oder von B3 -> B1 führen, also rufe ich transaction.addToBackStack (null) auf. Wenn wir in B2 oder B3 eine Option aus dem SlidingMenu auswählen, möchten wir den Backstack löschen. Daher verwende ich den in dieser Frage vorgeschlagenen CodeSäubern Sie den hinteren Stapel mit Fragmenten die popBackStack () aufruft, bis es klar ist.

So weit, ist es gut.

Von Fragment C1 können Sie zu Fragment C2 gehen. Als C1 / C2 verwende ich eher ein Master / Detail Design

fragmentTransaction.setCustomAnimations(R.animator.slide_in_from_right,
    R.animator.slide_out_to_left, R.animator.slide_in_from_left,
    R.animator.slide_out_to_right);

um eine Folienanimation hinzuzufügen, bei der C1 nach links herausgleitet, während C2 von rechts hineingleitet, und umgekehrt. Wenn Sie auf C2 die Zurück-Taste drücken, kehren Sie mit der umgekehrten Animation zu C1 zurück, und alles ist in Ordnung.

ABER

Wenn Sie im SlidingMenu A oder B1 auswählen und wir popBackStack (), um C1 vom Backstack zu entfernen, wird C2 nach rechts verschoben, was seltsam aussieht. Was ich tun möchte, ist, den Backstack zu löschen, ohne die Animation auszuführen, aber ich kann keinen Weg finden, dies zu tun. Ich habe versucht, stattdessen popBackStackImmediate () aufzurufen, aber das scheint keinen Unterschied zu machen.

Als Alternative könnte ich wohl vermeiden, addToBackStack überhaupt aufzurufen, und stattdessen den Benutzer manuell behandeln, indem er die Zurück-Taste über Activity.onBackPressed () drückt, aber vielleicht gibt es eine Lösung, die ich einfach nicht sehe?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage