【问题标题】:FragmentManager - IllegalStateException - No HostFragmentManager - IllegalStateException - 没有主机
【发布时间】:2015-10-19 09:10:22
【问题描述】:

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

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 whensetR​​etainInstance()`,但我根本不使用它。

感谢您的每一个建议。

【问题讨论】:

  • 大家好,你们有解决这个问题的办法吗?

标签: android android-fragments


【解决方案1】:

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

您也可以使用getSupportFragmentManager()

编辑: 如果这个 Fragment 是另一个 Fragment 的子级,这里返回的 FragmentManager 将是父级的getChildFragmentManager()

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

【讨论】:

  • 请澄清您的答案。它令人困惑。我们应该使用 getsupportfragementmanager 吗?
  • 感谢重播。请检查我编辑的答案。如需更多帮助,请随时提问。
【解决方案2】:

我不确定您为什么会收到此错误。我在重用 Fragments 而没有调用时遇到了这个错误

    fragmentManager.executePendingTransactions()

【讨论】:

    【解决方案3】:

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

    我已经尝试了解决方法 #10,但它对我不起作用。

    【讨论】:

      猜你喜欢
      • 2016-12-29
      • 2013-07-12
      • 1970-01-01
      • 1970-01-01
      • 2012-07-03
      • 2014-03-01
      • 2021-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多