"Diese Aktion kann nach onSaveInstanceState nicht ausgeführt werden" - Warum erhalte ich diese Ausnahme von der onResume-Methode meiner Aktivität?
Meine Tätigkeit ruft Sie die Kamera mit der ACTION_IMAGE_CAPTURE Absicht. Wenn die Aktivität der Kamera gibt erfolgreich, setze ich ein flag in der onActivityResult Rückruf, und auf der Grundlage des Wertes der flag starte ich ein fragment in meinem onResume zum hinzufügen einer Beschriftung zu einem Bild erfasst wurde. Dies scheint zu funktionieren ok.
Ich habe gerade einen stack-trace, aus dem "wilden" und beschwerte sich, dass ich versucht habe, zu Begehen, ein fragment Transaktion nach onSaveInstanceState aufgerufen wurde. Aber ich mache das commit in meinem onResume-Methode! Warum sollte android beklagen? Ich habe android:configChanges="orientation|keyboardHidden|Tastatur|screenSize" Satz in meinem AndroidManifest.xml so eine Orientierung zu ändern, sollten Sie nicht auslösen....
Dies geschah auf einem Samsung Galaxy S3 (SGH-i747) mit 4.0.4
Ist hier der stack:
java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1314)
at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1325)
at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:548)
at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:532)
at com.Familiar.Android.FamiliarAppV1.AddPhotosActivity2.performFragmentTransition(AddPhotosActivity2.java:278)
at com.Familiar.Android.FamiliarAppV1.AddPhotosActivity2.switchToCaptionsFragment(AddPhotosActivity2.java:438)
at com.Familiar.Android.FamiliarAppV1.AddPhotosActivity2.onResume(AddPhotosActivity2.java:167)
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1158)
at android.app.Activity.performResume(Activity.java:4544)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2448)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2486)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1187)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4514)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747)
at dalvik.system.NativeStart.main(Native Method)
Jede Hilfe oder Weisheit sehr geschätzt wird.
InformationsquelleAutor der Frage PacificSky | 2012-09-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke ich weiß die Antwort - ich bin mit der FragmentActivity aus v4 compatibility library, und so muss ich mein fragment-Transaktionen in onResumeFragments statt in onResume. Kann das jemand bestätigen?
InformationsquelleAutor der Antwort PacificSky
können Sie die Methode
commitAllowingStateLoss()
aber bewusst sein, das Sie verlieren können, den Zustand Ihrer Aktivität
wie Sie sehen können in google android-Referenz
die erklären den Unterschied zwischen den beiden in der folgenden Weise
aus meiner Erfahrung kann es zu
addToBackStack
Methode nicht auf der Arbeit manchmal, also müssen Sie es manuell hinzufügen, die auf das fragmentund natürlich ist der Zustand nicht gespeichert werden (textbox text ext.)
InformationsquelleAutor der Antwort Asaf Manassen
dieser arbeitete für mich... fand diese auf meinem eigenen... hoffe es hilft dir!
1) NICHT über eine Globale "statische" FragmentManager /FragmentTransaction.
2) onCreate, IMMER initialisieren der FragmentManager wieder!
Beispiel :-
InformationsquelleAutor der Antwort kurayami88
Update ich glaube, ich habe eine Erklärung gefunden und eine Lösung hier: http://code.google.com/p/android/issues/detail?id=23096#c4
Ich habe implementiert die Leeren Fragment Workaround geschrieben und bekam keine mehr IllegalStateException so weit.
Füge ich die unsichtbaren Zustand-fragment in meine Tätigkeit wie folgt;
Folgende code stammt aus der oben genannten link:
aufrufen und fragment-Transaktionen, die intuitiv gehen in onResume oder onResumeFragments in meine custom onFragmentAttached Methode, die aufgerufen wird, indem Sie die unsichtbaren Zustand-fragment. Ich glaube nicht, verwenden onResumeFragments an alle und nicht jeden fragment-Transaktionen in onResume.
Also, um es zusammenzufassen. Wenn Sie mit der support-lib und Fragmente, ziemlich viel vergessen onResume, vergessen onResumeFragments und setzen Sie Ihre eigene "onResume" auf der Grundlage der oben beschriebenen Problemumgehung.
Dies ist etwas lächerlich.
Kann ich nicht bestätigen. Ich habe genau das gleiche problem. auch wenn ich die Erteilung fragment Transaktion in onResumeFragments.
Dies funktionierte als ich hier gepostet: IllegalStateException - Fragment-Bibliothek unterstützt .
Es scheint, der Fehler tritt nur auf 4.0.3 und 4.0.4. Aber es ist weder auftreten, immer noch in meinem Emulator.
Bin ich mit dem support-lib-rev. 10 und API 16.
Ich nenne DialogFragment.show in onResumeFragments und kontinuierlich Holen Sie sich diese lächerliche Ausnahme von einigen zufälligen Nutzer. Kann ich nicht reproduzieren, es lokal.
InformationsquelleAutor der Antwort phlebas
Ich zunächst meine app-targeting android 2.2 SDK (8), mit der support v4-Bibliothek, und wenn ich starten Sie es mit 4.2 SDK (17), ich hatte die gleichen Probleme mit meiner Fragmente. Aber die änderung meiner Manifest android:minSdkVersion="8" android:targetSdkVersion="17", löste meine Probleme. Vielleicht hilft dir auch.
InformationsquelleAutor der Antwort Andre Rocha
War ich immer, wenn ich zu zeigen versucht-fragment in onActivityForResult () - Methode, so wurde das problem weiter:
Was ich gemacht habe ist die nächste:
InformationsquelleAutor der Antwort Array