当前位置: 首页 > 知识库问答 >
问题:

FragmentManager-IllegalStateExcema-没有主机

任伟
2023-03-14

我正面临着非常奇怪的问题与此堆栈跟踪:

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次发生此崩溃的情况。我使用了大量的片段,这意味着我无法确定异常抛出的确切位置。

碎片管理器的代码

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

在我看来,如果没有属于片段的主机活动,就会发生这种情况。我ve read调用setRetainInstance()`时,有时会抛出此异常,但我根本不使用它。

谢谢你的建议。


共有3个答案

卢子民
2023-03-14

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

我已经尝试了变通方法#10,但它不适合我。

颜新
2023-03-14

我不知道你为什么会得到这个错误。当我重用Fragments而不调用时,我得到了这个错误

    fragmentManager.executePendingTransactions()
壤驷兴朝
2023-03-14

如果您有嵌套的片段(其父活动扩展了FragmentActivity),则使用getChildFragmentManager()而不是getFragmentManager()

您还可以使用getSupportFragmentManager()

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

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

 类似资料:
  • 更新:当我把nullcheks(fragment!=null,getActivity()!=null)放到任何我能放的地方时,崩溃就消失了。 我的应用程序正在使用ViewPager(屏幕外限制5)和用getSupportFragmentManager()初始化的FragmentStatePagerAdapter。每一页都有它自己的片段和后栈。 应用程序在启动时崩溃。问题只发生在preLollipo

  • 我的应用程序一直在许多Android平台上报告这个问题(4.1、4.0.4、2.3.6.…)。但我无法在我的手机上复制这个问题。我已经在Google上搜索了这个问题,但堆栈跟踪似乎与我的不一样。

  • Spring HATEOAS提供了方便的ControllerLinkBuilder来创建指向控制器方法的链接,这些方法将作为HREF添加到返回给客户端的JSON/XML中。例如: ... 可能会生成类似以下内容的JSON: 然而... 我倾向于通过反向代理访问我的服务。我想大多数人可能会这样做。这让我可以在不同的端口上运行多个服务,但让我可以通过相同的基本URL访问它们。不幸的是,通过代理访问意味

  • 问题内容: 我在使用Find()方法的行中得到以下异常(缺少主键) “表没有主键。” 我已经重新检查了数据库,所有主键列均已正确设置。 我的代码: 问题答案: 您需要在调用 Find* 之前设置 DataTable 对象的 PrimaryKey 属性。 ***

  • 问题内容: 我正在使用Android兼容性库,偶尔会感到奇怪: 显然,我在做 一些 错误的操作,以允许它进入可能会像这样崩溃的状态,但是我不知道该怎么办。在相关的代码中没有提供我任何线索。我猜是某种在代码中的那一点?但这似乎是不可能的,因为该活动已经在屏幕上了,并且我没有在其中添加任何片段- 只需在中进行切换即可。 问题答案: 好的,在将我的头撞到砖墙上一段时间后,我发现这与我的片段的声明直接相关

  • 我也尝试使用主机名(而不是IP地址),但是没有任何变化。有人帮忙吗?