6

Moja aplikacja nadal zgłasza ten problem na wielu platformach Android (4.1, 4.0.4, 2.3.6 ...). Ale nie mogłem odtworzyć tego problemu na moim telefonie. Mam wyszukiwane przez Google ten problem, ale ślad stosu nie jest taki sam jak mój.IllegalStateException na FragmentManager

Czy ktoś wie, jak to się dzieje? I jak temu zapobiec? Lub jak mogę odtworzyć ten błąd? Dziękuję. ślad

Stos:

java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState 
at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1327) 
at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1338) 
at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595) 
at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574) 
at android.support.v4.app.FragmentTabHost.onAttachedToWindow(FragmentTabHost.java:278) 
at android.view.View.dispatchAttachedToWindow(View.java:12064) 
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2707) 
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2714) 
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2714) 
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2714) 
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2714) 
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1339) 
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1131) 
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4611) 
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725) 
at android.view.Choreographer.doCallbacks(Choreographer.java:555) 
at android.view.Choreographer.doFrame(Choreographer.java:525) 
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711) 
at android.os.Handler.handleCallback(Handler.java:615) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:4898) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1008) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775) 
at dalvik.system.NativeStart.main(Native Method) 

-------------------- Edycja --------------- -----

Do Jonathan:

Mam dwa fragmenty. I tylko jeden fragment zastępuje wywołanie zwrotne , a kody są jak poniżej. I nie zastępuję innych wywołań zwrotnych po . Kolejne wywołanie zwrotne, które nadpisuję, to wywołanie zwrotne onResume, kody też są poniżej.

Fragment:

@Override 
public void onPause() { 
    super.onPause(); 
    if (mView instanceof MyView) { 
     MyView my = (MyView) mView; 
     my.onPause(); 
    } 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    if (mView instanceof MyView) { 
     MyView my = (MyView) mView; 
     my.onResume(); 
    } 
} 

MyView:

public void onPause() { 
    pause = true; 
} 

public void onResume() { 
    pause = false; 
    if (mDialog != null && mDialog.isShowing()) { 
     mDialog.dismiss(); 
     mDialog = null; 
    } 
} 

ja również śledzić kody FragmentActivity/FragmentManager, wydaje się, jeżeli onAttachedToWindow() być wywołana przed onPostResume(), to problem będzie zdarzyć. Czy to możliwe, aby onAttachedToWindow() było wywoływane przed onPostResume()?

+0

Czy robisz coś w wywołania zwrotne dla OnPause() lub cokolwiek później w cyklu Fragment? – Jonathan

+0

Najprawdopodobniej problem spowodowany przez obrót ekranu i 'onSaveInstanceState'. Sprawdź linię 'FragmentTabHost.onAttachedToWindow': 278. Ponadto, jeśli możesz podać kod dla' FragmentTabHost'. – LuckyMe

+1

@LuckyMe FragmentTabHost jest częścią źródła Androida, a nie czymś, co ten użytkownik zaimplementował. – Jonathan

Odpowiedz

9

Ten problem jest spowodowany przez zatwierdzenie fragmentu po uruchomieniu działania.

Prostym rozwiązaniem jest użycie FragmentTransaction.commitAllowingStateLoss() zamiast FragmentTransaction.commit()

+0

http://stackoverflow.com/a/17527246/1284177 – Moxor

+0

dziękuję to działało –