popBackStack und commitAllowingStateLoss

8

Ich rufe popBackStack () in Activity onCreate () -Methode auf, bekomme aber die Ausnahme:

%Vor%

Ich verstehe, dass eine Möglichkeit, diese Ausnahme zu lösen, vorausgesetzt, dass Sie mit den Auswirkungen auf die Benutzeroberfläche und den Endbenutzer zufrieden sind, darin besteht, commitAllowingStateLoss aufzurufen.

Das Problem ist, dass es bei popBackStack keinen Commit-Aufruf gibt. Gibt es eine andere Möglichkeit, PopBackStack aufzurufen und Statusverlust zuzulassen?

Ich sollte sagen, ich mache das in onPostResume und bekomme diese Ausnahme.

    
user3690202 28.02.2017, 02:14
quelle

2 Antworten

1

Nach vielen Recherchen bin ich zu dem Schluss gekommen, dass es nicht möglich ist, Fragmente auf Android zu manipulieren, wenn die Aktivität wieder aufgenommen wird. Ich habe versucht, wie im erwähnten Blogpost onPostResume () und onResumeFragments () Fragmente aus dem Backstack zu knacken, und beide führen zu zeitweiligen Abstürzen, wenn sie zur Produktion freigegeben werden.

Der Nachteil dieser Realität ist, dass wenn Sie zum Beispiel ein Ende des Level-Fragments, gefolgt von einer Interstitial-Werbung, gefolgt von der nächsten Ebene (als ein anderes Fragment bis zum Ende des Level-Fragments) anzeigen möchten Es ist nicht möglich, Fragmente zu verwenden.

Für meine persönliche Situation habe ich alle Fragmente aus meiner Bewerbung entfernt. Ich benutze immer Layouts, weil das Bearbeiten der Benutzeroberfläche in XML nützlich ist, aber der Fragment-Lebenszyklus ist in seinem aktuellen Zustand nicht verwendbar, also habe ich mein eigenes "Fragment" -Subsystem gerollt, aber besser, weil es von den Aktivitäten onResume manipuliert werden kann.

Ich hoffe, dass Google das eines Tages beheben wird, weil es die Entwicklung für Android wirklich unangenehm macht. Wie auch immer, wenn jemand Fragmente verwenden muss, aber die typische onSaveInstanceState-Ausnahme, die Sie immer erhalten, nicht mag, hier ist meine "GameScreen" -Implementierung (es ist wie ein Fragment, nur besser)

%Vor%     
user3690202 06.03.2017, 02:16
quelle
0

Ich habe das unten von diesem Blog Ссылка

Dieser Fehler kann auftreten, wenn sich commit() in einem Aktivitäts-Callback befindet, der aufgerufen werden kann, bevor der Aktivitätsstatus wiederhergestellt wird. Der beste Ort für popBackStack() ist onResumeFragments() callback

popBackStack() haben eine commit() , die intern aufgerufen wird, da sie nur die letzte FragmentTransaction im Backstack umkehrt.

    
arjun 04.03.2017 07:49
quelle

Tags und Links