android - FragmentManager - IllegalStateException - 无主机

标签 android android-fragments

我遇到了这个堆栈跟踪的非常奇怪的问题:

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)

我在多个 Android 版本(4.1.2、4.2.2、6.0)上跟踪了 4 次崩溃。我用了很多 Fragments ,这意味着我无法弄清楚抛出异常的确切位置。

代码FragmentManager :

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

在我看来,当没有主机时会发生这种情况 Activity属于Fragment .我 ve read this exception is sometimes thrown when调用了 setRetainInstance()`,但我根本不使用它。

感谢您的每一个建议。

最佳答案

如果您嵌套了 Fragment(父 Activity 扩展了 FragmentActivity),则使用 getChildFragmentManager() 而不是 getFragmentManager()

您还可以使用 getSupportFragmentManager()

编辑: 如果此 fragment 是另一个 fragment 的子 fragment ,则此处返回的 FragmentManager 将是父 fragment 的 getChildFragmentManager() .

注意: 返回此 fragment 的宿主对象。如果 fragment 当前未被托管,则可能返回 null。看 http://developer.android.com/reference/android/app/Fragment.html#getHost()

关于android - FragmentManager - IllegalStateException - 无主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33210617/

相关文章:

android - 如何在 Android 上显示来自后台线程的 Toast?

java - Android 服务基础知识

java - Android SDK,检查设备是否为 Amazon-FireTV

android - 在 Android 2.2 中使用带有 Activity 的 fragment 时应用程序崩溃

android - WPD/MTP 可移植设备,内容始终为空(Windows、VisualStudio 2012、VB.NET)

android - 如何使用 buildTypes、productFlavors 和 sourceSet 为不同的 android channel 批量构建 apk

java - 为什么我会遇到类强制转换异常?安卓

android - 如何调用fragmentPagerAdapter中的getItem(int position)?

android - 空指针异常 - Android Fragment 中的按钮

android - 如何使用 IntentsTestRule 和 launchFragmentInContainer 测试是否从 fragment 发送 Intent