2015-10-19 49 views
12

我現在面臨很奇怪的問題,這個堆棧跟蹤:FragmentManager - IllegalStateException異常 - 無主機

Fatal Exception: java.lang.IllegalStateException No host 
    android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1194) 
    android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1189) 
    android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated (FragmentManager.java:2001) 
    android.support.v4.app.Fragment.performActivityCreated (Fragment.java:1976) 
    android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1051) 
    android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1207) 
    android.support.v4.app.BackStackRecord.run (BackStackRecord.java:738) 
    android.support.v4.app.FragmentManagerImpl.execPendingActions (FragmentManager.java:1572) 
    android.support.v4.app.FragmentManagerImpl$1.run (FragmentManager.java:493) 
    android.os.Handler.handleCallback (Handler.java:733) 
    android.os.Handler.dispatchMessage (Handler.java:95) 
    android.os.Looper.loop (Looper.java:146) 
    android.app.ActivityThread.main (ActivityThread.java:5593) 
    java.lang.reflect.Method.invokeNative (Method.java) 
    java.lang.reflect.Method.invoke (Method.java:515) 
    com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1283) 
    com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1099) 
    dalvik.system.NativeStart.main (NativeStart.java) 

我跟蹤4個OCCURENCES此崩潰多的Android版本(4.1.2,4.2.2,6.0)的。我使用了很多Fragments,這意味着我無法弄清楚拋出異常的位置。

代碼FragmentManager

void moveToState(int newState, int transit, int transitStyle, boolean always) { 
    if (mHost == null && newState != Fragment.INITIALIZING) { 
     throw new IllegalStateException("No host"); 
    } 
    ... 
} 

在我看來,出現這種情況時,有屬於Fragment沒有主機Activity。我調用了setRetainInstance()`,但我根本不使用它。

感謝您的每一個建議。

+2

嗨,大家好,你有任何解決方案,這個問題呢? –

回答

3

如果嵌套Fragment(其父活動擴展FragmentActivity),則使用getChildFragmentManager()而不是getFragmentManager()。您可以使用getSupportFragmentManager()

編輯: 如果該片段是另一片段的孩子,FragmentManager返回這裏將成爲母公司的getChildFragmentManager()

注意: 返回此片段的主機對象。如果片段當前沒有託管,可能會返回null。見 http://developer.android.com/reference/android/app/Fragment.html#getHost()

+0

請澄清你的答案。它令人困惑。應該使用getsupportfragementmanager還是不行? – Siddharth

+0

感謝您的重播。 請檢查我編輯的答案。想要更多的幫助隨時問。 – pRaNaY

+0

讓我試着糾正它。你審查它。 – Siddharth

1

我不知道爲什麼你會得到這個錯誤。我得到這個錯誤,當我重複使用片段,而不是調用

fragmentManager.executePendingTransactions() 
相關問題