Android onConfigurationChanged: Wie speichere und restauriere ich den Fragment-Back-Stack?

8

Ich habe eine Aktivität mit einem Doppelfenster: eine Liste von Menüelementen auf der linken Seite (Fragment M) und Details des aktuell ausgewählten Elements auf der rechten Seite (Fragment D).

Wenn der Benutzer ein Element in Fragment D auswählt, wird Fragment D durch ein anderes Fragment ersetzt (nennen wir es D1). Wenn der Benutzer ein Element in Fragment D1 auswählt, wird Fragment D1 durch ein anderes Fragment ersetzt (nennen wir es D2), und so weiter. Wenn der Benutzer den Zurück-Knopf drückt, kann er natürlich in der Fragmentgeschichte zurückgehen: D2- & gt; D1- & gt; D.

Mein Problem ist: Wie kann ich den vollständigen Fragment-Back-Stack bei Konfigurationsänderungen (insbesondere bei der Bildschirmausrichtung) speichern und wiederherstellen?

Es kommt mir sehr seltsam vor, dass niemand zuvor dieses Problem hatte, aber ich habe bei meinen Suchanfragen bei Google und Stack Overflow nichts darüber gefunden. Wenn ich einen relevanten Beitrag verpasst habe, bitte adressiere mich dazu.

Ich weiß, dass ich einfach das android:configChanges="orientation|screenSize" -Attribut zu meiner Aktivität hinzufügen kann, um Aktivitätserholung zu vermeiden, aber das kann ich einfach nicht tun.

Der Grund, warum ich das nicht kann, ist, dass ich Action Bar Sherlock (Vers. 4) für die Abwärtskompatibilität verwende und diese Komponente Activity Recreation benötigt, um sich bei Konfigurationsänderungen richtig zu verhalten, AFAIK.

Wenn es eine andere Möglichkeit gibt, die Action Bar Sherlock-Komponente neu zu erstellen, ohne die Aktivität zu zerstören und neu zu erstellen, lassen Sie es mich bitte wissen.

Vielen Dank im Voraus.

    
Luke 03.04.2012, 18:45
quelle

2 Antworten

5

Ich konnte dies tun, indem ich die Fragmente im Cache speicherte, während ich sie in meine eigene ArrayListe einfügte. Dann richte ich einen OnBackStackChangedListener ein, um zu verfolgen, welcher angezeigt wurde, und platziere die ArrayList nach Bedarf.

Mein Zweck war ein wenig anders, aber der folgende Code sollte das sein, was du für das brauchst, was du beschreibst. Die Tags sind so, dass Sie bei Bedarf mehrere Backstacks haben können. Es wird nicht wie es ist kompiliert (Ich habe viel von meinem eigenen Code abgeschnitten), aber sollte Ihnen eine Vorstellung davon geben, wie ich es gemacht habe. Zusätzlicher Haftungsausschluss: Ich habe nur funktioniert und es gibt Probleme, die ich noch nicht erreicht habe.

%Vor%

Der Code, den Sie benötigen, wenn Ihre Aktivität nach einer Orientierungsänderung neu erstellt wird:

%Vor%

Der Backstack-Listener:

%Vor%

Hoffe, das hilft.

    
Oded 06.04.2012 03:13
quelle
0

Aktionsleiste Sherlock (ABS) musste die Aktionsleiste als Teil der Neuerstellung der Aktivität in ABS 3.x neu erstellen, laut @ Jake Whartons Kommentar , Version 4 braucht keine Erholung - es kann mit Orientierungsänderungen umgehen. Setzen Sie also android: configChanges="orientation" und Ihr Fragment-Back-Stack wird beibehalten.

    
larham1 03.04.2012 23:24
quelle