La mia app continua a segnalare questo problema su molte piattaforme Android (4.1, 4.0.4, 2.3.6 ...). Ma non ho potuto riprodurre questo problema sul mio telefono. Ho cercato questo problema da Google, ma la traccia dello stack non sembra uguale alla mia.IllegalStateException su FragmentManager
Qualcuno sa come sta accadendo il problema? E come prevenirlo? O come posso riprodurre questo errore? Grazie. traccia
Stack:
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)
-------------------- Modifica --------------- -----
a Jonathan:
ho due frammenti. E solo un frammento sovrascrive il callback ei codici sono i seguenti. E non sovrascrivo le altre callback dopo lo . Un altro callback che sovrascrivo è il callback onResume
, i codici sono ugualmente come sotto.
Frammento:
@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;
}
}
Ho anche traccio i codici dei FragmentActivity
/FragmentManager
, a quanto pare se la onAttachedToWindow()
essere chiamato prima onPostResume()
, allora il problema sarà accadere. È possibile chiamare onAttachedToWindow()
prima dello onPostResume()
?
che cosa fate nelle vostre callback per onPause() o qualcosa più avanti nel ciclo di vita del frammento? – Jonathan
Molto probabilmente un problema causato dalla rotazione dello schermo e da 'onSaveInstanceState'. Controllare la riga 'FragmentTabHost.onAttachedToWindow': 278. Inoltre, se è possibile fornire il codice per' FragmentTabHost'. – LuckyMe
@LuckyMe FragmentTabHost fa parte della sorgente Android, non qualcosa che questo utente ha implementato. – Jonathan