6

Ứng dụng của tôi tiếp tục báo cáo sự cố này trên nhiều nền tảng Android (4.1, 4.0.4, 2.3.6 ...). Nhưng tôi không thể tái tạo vấn đề này trên điện thoại của mình. Tôi đã tìm kiếm sự cố này của Google, nhưng theo dõi ngăn xếp có vẻ không giống với của tôi.IllegalStateException trên FragmentManager

Có ai đó biết sự cố xảy ra không? Và làm thế nào để ngăn chặn nó? Hoặc làm cách nào tôi có thể tạo lại lỗi này? Cảm ơn bạn.

Stack trace:

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) 

-------------------- Sửa --------------- -----

Để Jonathan:

Tôi có hai đoạn. Và chỉ có một đoạn ghi đè cuộc gọi lại và các mã như sau. Và tôi không ghi đè các cuộc gọi lại khác sau . Một cuộc gọi lại khác mà tôi ghi đè là cuộc gọi lại onResume, các mã cũng như sau.

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

Tôi cũng theo dõi các quy tắc ứng FragmentActivity/FragmentManager, có vẻ như nếu onAttachedToWindow() được gọi trước khi onPostResume() thì vấn đề này sẽ xảy ra. Có thể gọi onAttachedToWindow() trước onPostResume() không?

+0

Bạn có làm bất cứ điều gì trong callbacks của bạn cho onPause() hoặc bất cứ điều gì sau này trong vòng đời Fragment? – Jonathan

+0

Rất có thể sự cố xảy ra do xoay màn hình và 'onSaveInstanceState'. Kiểm tra dòng 'FragmentTabHost.onAttachedToWindow': 278. Ngoài ra, nếu bạn có thể cung cấp mã cho' FragmentTabHost'. – LuckyMe

+1

@LuckyMe FragmentTabHost là một phần của nguồn Android, không phải cái gì mà người dùng này đã triển khai. – Jonathan

Trả lời

9

Vấn đề này là do cam kết một đoạn sau khi hoạt động được bật.

Một giải pháp đơn giản là sử dụng FragmentTransaction.commitAllowingStateLoss() thay vì FragmentTransaction.commit()

+0

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

+0

cảm ơn nó đã hoạt động –

Các vấn đề liên quan