【问题标题】:Fatal Exception: java.lang.IllegalStateException No activity致命异常:java.lang.IllegalStateException 无活动
【发布时间】:2017-09-11 13:39:41
【问题描述】:

我在 crashlytics fabric 中得到的 Stacktrace 如下,

Fatal Exception: java.lang.IllegalStateException: No activity
   at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1058)
   at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1053)
   at android.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1862)
   at android.app.Fragment.performActivityCreated(Fragment.java:1724)
   at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:915)
   at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1071)
   at android.app.BackStackRecord.run(BackStackRecord.java:684)
   at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1456)
   at android.app.FragmentManagerImpl$1.run(FragmentManager.java:444)
   at android.os.Handler.handleCallback(Handler.java:733)
   at android.os.Handler.dispatchMessage(Handler.java:95)
   at android.os.Looper.loop(Looper.java:136)
   at android.app.ActivityThread.main(ActivityThread.java:5398)
   at java.lang.reflect.Method.invokeNative(Method.java)
   at java.lang.reflect.Method.invoke(Method.java:515)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:680)
   at dalvik.system.NativeStart.main(NativeStart.java)
Show all 74 Threads

我觉得它没有任何帮助。谁能告诉我如何追踪它以及如何找到导致问题的活动以及可能是什么问题?

【问题讨论】:

标签: java android crashlytics


【解决方案1】:

您使用错误的 FragmentManager 嵌套片段。您应该使用

返回的 fragmentManager 实例
getChildFragmentManager();  

而不是使用

getSupportFragmentManager();

您可以在此处获取有关嵌套片段的更多信息:https://developer.android.com/about/versions/android-4.2.html#NestedFragments

您可以在片段中嵌入片段。这对于您希望将动态且可重用的 UI 组件放入本身是动态且可重用的 UI 组件的各种情况很有用。您可以在每个片段页面中插入片段。

要嵌套片段,只需在要添加片段的片段上调用 ​​getChildFragmentManager()。这将返回一个 FragmentManager,您可以像通常从顶级活动中一样使用它来创建片段事务。例如,下面是一些从现有 Fragment 类中添加片段的代码:

Fragment videoFragment = new VideoPlayerFragment();
FragmentTransaction transaction = 
      getChildFragmentManager().beginTransaction();
    transaction.add(R.id.video_fragment, videoFragment).commit();

在嵌套片段中,您可以通过调用 getParentFragment() 获取对父片段的引用。

【讨论】:

  • 有什么方法可以追踪到这里的罪犯是哪个片段?
  • 首先需要看一下getSupportFragmentManager()的用法;在你的代码中。你能发布你的代码吗?
  • 有20多个片段
  • 任何其他方式来找出,由于这个原因,我在 crashlytics 中遇到了大量崩溃
  • 嵌套片段的实例?即在片段内创建片段?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-30
  • 2018-05-02
  • 1970-01-01
  • 2016-05-05
  • 2019-03-18
相关资源
最近更新 更多