Wie gehen Sie mit Fragmenttransaktionen um, wenn der Status der übergeordneten Aktivität unbedingt gespeichert werden soll?

8

Meine App enthält mehrere Fragmente und Aktivitäten. Im Verlauf des Lebenszyklus der Hauptelternaktivität stellt die App Informationen / Optionen für den Benutzer in anderen Aktivitäten bereit.

Die Dokumentation für Fragmente hat die folgende Bestimmung für commit ():

  

Achtung: Sie können eine Transaktion nur mit commit () festschreiben, bevor die Aktivität ihren Status speichert (wenn der Benutzer die Aktivität verlässt). Wenn Sie versuchen, nach diesem Punkt zu committen, wird eine Ausnahme ausgelöst. Dies liegt daran, dass der Status nach dem Festschreiben verloren gehen kann, wenn die Aktivität wiederhergestellt werden muss. Für Situationen, in denen es in Ordnung ist, dass Sie das Commit verlieren, verwenden Sie commitAllowingStateLoss ().

Das Problem ist, dass ich nach der Rückkehr zur übergeordneten Aktivität keine FragmentTransactions mehr verwenden kann, die integraler Bestandteil der Art sind, wie ich die Navigation in der App gestaltet habe.

Eine Lösung, an die ich gedacht habe, ist, meine Aktivitäten in Fragmente zu verwandeln, aber meine App wird auch irgendwann die In-App-Abrechnung verwenden, von der ich glaube, dass sie immer ihre eigene Aktivität starten wird. Dies scheint eine große Einschränkung zu sein - irgendwann in der Entwicklung werde ich am Ende eine separate Aktivität anzeigen müssen.

Ich könnte wahrscheinlich mit der Verwendung von commitAllowingStateLoss () durchkommen, aber ich habe das Gefühl, dass mir ein wichtiges Konzept bei der Entwicklung von Android-Tablet-Apps fehlt. Gibt es eine Möglichkeit, Aktivitäten zu starten und dann zu der übergeordneten Aktivität zurückzukehren (die Fragmente verwaltet), ohne die Möglichkeit zu verlieren, FragmentTransactions zu committen?

    
Zambotron 03.11.2011, 16:33
quelle

1 Antwort

3

Sie können Fragmenttransaktionen erneut auslösen, wenn Ihre übergeordnete Aktivität wieder aufgenommen / gestartet wird, auch wenn sie zuvor pausiert wurde. Die Dokumente bedeuten nur, dass Sie während des Zeitraums, in dem die Aktivität angehalten wurde (und der Status gespeichert wurde) und bevor sie wieder fortgesetzt wurde, keine Commits ausführen können. Wenn Sie nach dem Besuch einer anderen Aktivität zu Ihrer übergeordneten Aktivität zurückkehren, können Sie Fragmenttransaktionen erneut verwenden, nachdem Activity.onStart() aufgerufen wurde.

Der Grund für diese Einschränkung ist, dass Android den Status von Fragmenten speichert, die mit einer Aktivität während Activity.onSaveInstanceState() verknüpft sind. Wenn Sie nach diesem Punkt versuchen, Fragmenttransaktionen durchzuführen, werden Sie einem Staatsverlust ausgesetzt, wenn Android diese Aktivität neu erstellen und wiederherstellen muss (da die Informationen, die zur Wiederherstellung des Aktivitätsstatus verwendet werden, nur die Daten waren, die in Activity.onSaveInstanceState() erfasst wurden. ).

    
antonyt 13.05.2013, 11:50
quelle