Pac*_*Sky 30 android illegalstateexception android-fragments
我的活动使用ACTION_IMAGE_CAPTURE意图调用相机.如果相机活动成功返回,我在onActivityResult回调中设置了一个标志,并根据标志的值我在onResume中启动一个片段,为捕获的图像添加标题.这似乎工作正常.
我只是从"狂野"中得到一个堆栈跟踪抱怨我在调用onSaveInstanceState后尝试提交片段事务.但我正在使用onResume方法进行提交!为什么android会抱怨这个?我的AndroidManifest.xml中设置了android:configChanges ="orientation | keyboardHidden | keyboard | screenSize",因此方向更改不应触发此....
这发生在运行4.0.4的三星Galaxy S3(SGH-i747)上
这是堆栈:
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)
Run Code Online (Sandbox Code Playgroud)
任何帮助或智慧都表示赞赏.
Pac*_*Sky 56
我想我知道答案 - 我正在使用v4兼容库中的FragmentActivity,所以我需要在onResumeFragments而不是onResume中执行我的片段事务.有人可以证实吗?
Asa*_*sen 13
你可以使用这个方法 commitAllowingStateLoss()
但请注意,您可以丢失您的活动状态,因为您可以在google的android参考中看到, 它以下列方式解释了两者之间的差异
与commit()类似,但允许在保存活动状态后执行提交.这很危险,因为如果活动需要稍后从其状态恢复,则提交可能会丢失,因此这应该仅用于UI状态可以在用户上意外更改的情况.
根据我的经验,它可能导致addToBackStack方法有时无法工作,因此您需要在片段上手动添加它,当然状态不会被保存(文本框文本扩展名).