FragmentManager - IllegalStateException异常 - 无主机

问题描述:

我现在面临很奇怪的问题,这个堆栈跟踪: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

嗨,大家好,你有任何解决方案,这个问题呢? –

如果嵌套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

我有同样的问题,这似乎是相关的问题:https://code.google.com/p/android/issues/detail?id=42601。在以前版本的支持v4库中,例外是java.lang.IllegalStateException: No activity

我已经尝试了解决方法#10,但它并没有为我工作。

我不知道为什么你会得到这个错误。我得到这个错误,当我重复使用片段,而不是调用

fragmentManager.executePendingTransactions()