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)
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With