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.
- Java.lang.IllegalStateException: No se puede realizar esta acción después de onSaveInstanceState
- "No se puede realizar esta acción después de onSaveInstanceState" - ¿por qué recibo esta excepción del método onResume de mi actividad?
- java.lang.IllegalStateException (No se puede realizar esta acción después de onSaveInstanceState)
- Intento de volver a abrir un objeto ya cerrado: java.lang.IllegalStateException 😕
- OnViewCreated - lugar equivocado para reemplazar el fragmento?
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)
- Añadir pestañas a la izquierda con FragmentPagerAdapter
- java.lang.IllegalStateException: Llamar Ver métodos en otro subproceso que el subproceso de interfaz de usuario
- GetSupportFragmentManager () causa java.lang.IllegalStateException: No se puede realizar esta acción después de onSaveInstanceState
- IllegalStateException cuando .replace el fragmento al reiniciar
- Java.lang.IllegalStateException: Fragmento no adjunto a la actividad
- Fragmento inflado en Fragmento El cuadro de diálogo arroja el error "Fragmento no creó una vista"
- Haga clic en el elemento que conduce a IllegalStateException
- Android GoogleMaps V2 MarkerDemo IllegalStateException no incluye puntos
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.
Debe llamar a setup () antes de usar addTab (): http://developer.android.com/reference/android/support/v4/app/FragmentTabHost.html
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 ().