Android - Unable to destroy activity after finish, caused by IllegalStateException: Can not perform this action after onSaveInstanceState -
i have activity in app 3 fragments. when button pushed on first one, method called in activity irrelevant stuff , calls finish()
.
this triggers onpause()
on fragment, more irrelevant stuff , calls super.onpause()
.
the app loads old activity came on (logically following view stack), , crashes following exception when ondestroyview()
called on fragment:
fatal exception: main java.lang.runtimeexception: unable destroy activity {be.niteowl.niteowl.debug/be.niteowl.niteowl.views.activities.venueactivity}: java.lang.illegalstateexception: can not perform action after onsaveinstancestate @ android.app.activitythread.performdestroyactivity(activitythread.java:2793) @ android.app.activitythread.handledestroyactivity(activitythread.java:2811) @ android.app.activitythread.access$2100(activitythread.java:123) @ android.app.activitythread$h.handlemessage(activitythread.java:972) @ android.os.handler.dispatchmessage(handler.java:99) @ android.os.looper.loop(looper.java:130) @ android.app.activitythread.main(activitythread.java:3835) @ java.lang.reflect.method.invokenative(native method) @ java.lang.reflect.method.invoke(method.java:507) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:864) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:622) @ dalvik.system.nativestart.main(native method) caused by: java.lang.illegalstateexception: can not perform action after onsaveinstancestate @ android.support.v4.app.fragmentmanagerimpl.checkstateloss(fragmentmanager.java:1327) @ android.support.v4.app.fragmentmanagerimpl.enqueueaction(fragmentmanager.java:1338) @ android.support.v4.app.backstackrecord.commitinternal(backstackrecord.java:595) @ android.support.v4.app.backstackrecord.commit(backstackrecord.java:574) @ be.niteowl.niteowl.views.activities.trackfragment.ondestroyview(trackfragment.java:161) @ android.support.v4.app.fragment.performdestroyview(fragment.java:1665) @ android.support.v4.app.fragmentmanagerimpl.movetostate(fragmentmanager.java:980) @ android.support.v4.app.fragmentmanagerimpl.movetostate(fragmentmanager.java:1088) @ android.support.v4.app.fragmentmanagerimpl.movetostate(fragmentmanager.java:1070) @ android.support.v4.app.fragmentmanagerimpl.dispatchdestroy(fragmentmanager.java:1898) @ android.support.v4.app.fragmentactivity.ondestroy(fragmentactivity.java:324) @ com.actionbarsherlock.app.sherlockfragmentactivity.ondestroy(sherlockfragmentactivity.java:88) @ android.app.activitythread.performdestroyactivity(activitythread.java:2780) ... 11 more
the error appears happen when trying remove mapfragment
main fragment. know you're not supposed have fragments within fragments, code worked in past , there's no way around anyway.
@override public void ondestroyview() { supportmapfragment f = (supportmapfragment) activity.getsupportfragmentmanager().findfragmentbyid(r.id.fragment_map); if (f != null) { activity.getsupportfragmentmanager().begintransaction().remove(f).commit(); } super.ondestroyview(); }
i looked around fix here on (most notably getting exception "illegalstateexception: can not perform action after onsaveinstancestate"), none of them applicable current problem.
since activity being destroyed, fragments automatically destroyed. hence, there no need remove them. delete ondestroyview()
method.
i know you're not supposed have fragments within fragments, code worked in past , there's no way around anyway.
first, fragments within fragments supported via android support package's backport of fragments , native android 4.2+ implementation of fragments.
second, not doing fragments within fragments, @ least not based on code shown here. reason, trackfragment
managing top-level fragment (your supportmapfragment
), rather delegating work activity.
Comments
Post a Comment