MainActivity have a FragmentTabHost in it ,and five Fragments add to this FragmentTabHost.
Here is the init code
protected void onCreate(Bundle savedInstanceState) {
mFragmentManager = getSupportFragmentManager();
mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
mTabHost.setup(this, mFragmentManager, android.R.id.tabcontent);
// Home
mTabHost.addTab(
mTabHost.newTabSpec(TAB_TAG_HOME).setIndicator(
newTabItem(R.drawable.mi_selector_tab_home,
R.string.mi_tab_item_milian)),
TabFateFragment.class, null);
// Serach
mTabHost.addTab(
mTabHost.newTabSpec(TAB_TAG_SEARCH).setIndicator(
newTabItem(R.drawable.mi_selector_tab_search,
R.string.mi_navi_title_search)),
TabSearchFragment.class, null);
// Msg
mTabHost.addTab(
mTabHost.newTabSpec(TAB_TAG_MSG).setIndicator(
newTabItem(R.drawable.mi_selector_tab_msg,
R.string.mi_navi_title_msg)),
TabMsgFragment.class, null);
// Nearby
mTabHost.addTab(
mTabHost.newTabSpec(TAB_TAG_NEARBY).setIndicator(
newTabItem(R.drawable.mi_selector_tab_nearby,
R.string.mi_navi_title_nearby)),
TabNearbyFragment.class, null);
// Me
mTabHost.addTab(
mTabHost.newTabSpec(TAB_TAG_ME).setIndicator(
newTabItem(R.drawable.mi_selector_tab_me,
R.string.mi_navi_title_me)),
TabMeFragment.class, null);
......
}
And i have read this article ,find no FragmentTransaction#commit() in my code.
And i have tried not calling super.onSaveInstanceState(Bundle outState) in my Activity.onSaveInstanceState(outState)
@Override
protected void onSaveInstanceState(Bundle outState) {
// super.onSaveInstanceState(outState);
}
Here's the crash log
java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at android.support.v4.app.FragmentManagerImpl.checkStateLoss(Unknown Source)
at android.support.v4.app.FragmentManagerImpl.enqueueAction(Unknown Source)
at android.support.v4.app.BackStackRecord.commitInternal(Unknown Source)
at android.support.v4.app.BackStackRecord.commit(Unknown Source)
at android.support.v4.app.FragmentTabHost.onAttachedToWindow(Unknown Source)
at android.view.View.dispatchAttachedToWindow(View.java:12134)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2453)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2460)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2460)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2460)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2460)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1207)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1004)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5483)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:778)
at android.view.Choreographer.doCallbacks(Choreographer.java:591)
at android.view.Choreographer.doFrame(Choreographer.java:561)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:764)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5109)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Best Answer
The onSaveInstanceState method is called before the Activity is about to be destroyed,to save the Activity data.It causes error to add Fragment to it after the data is saved.The solution is to replace the commit() method with commitAllowingStateLoss(),and the effect is the same.