Java.lang.IllegalStateException: No se puede realizar esta acción después de onSaveInstanceState, FragmentTabHost

MainActivity tiene un FragmentTabHost en él, y cinco Fragments añaden a este FragmentTabHost. Aquí está el código init

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); ...... } 

Y he leído este artículo , no encuentro FragmentTransaction # commit () en mi código.

Y he intentado no llamar a super.onSaveInstanceState (Bundle outState) en mi Activity.onSaveInstanceState (outState)

  @Override protected void onSaveInstanceState(Bundle outState) { // super.onSaveInstanceState(outState); } 

Aquí está el registro del accidente

 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) 

El método onSaveInstanceState se llama antes de que la actividad esté a punto de ser destruida, para guardar los datos de Activity.It hace que el error agregue Fragment a él después de que los datos se guardan. La solución es reemplazar el método commit () por commitAllowingStateLoss () El efecto es el mismo.

Uso de Framelayout:

 <FrameLayout android:id="@+id/tab_content" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="bottom" android:orientation="vertical" /> 

Y agregue un método:

 private synchronized void replaceFragment() { FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); // Workaround for Issue 42601: // https://code.google.com/p/android/issues/detail?id=42601 fragmentTransaction.detach(tabFragments[previousTabIdx]).replace(R.id.tab_content, tabFragments[curTabIdx]) .attach(tabFragments[curTabIdx]).commitAllowingStateLoss(); previousTabIdx = curTabIdx; } 

Entonces puede usar el método commitAllowingStateLoss ().

  • IllegalStateException con PagerAdapter
  • Excepción de estado ilegal al intentar cambiar un marcador en un Api de Google Maps v2 desde un mensaje de Google Cloud Messaging
  • Android.media.audiofx.Visualizer lanzando excepción cada otra vez
  • Android: no se puede destruir la actividad después de terminar, causada por IllegalStateException: No se puede realizar esta acción después de onSaveInstanceState
  • AudioTrack: play () llamado en AudioTrack no inicializado
  • Android - SQLite Cursor getColumnIndex () es sensible a mayúsculas y minúsculas?
  • En Facturación de aplicaciones - Orientación rápida de dispositivos - causa bloqueo (IllegalStateException)
  • IllegalStateException en FragmentManager
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.