【问题标题】:onDetach not called for fragment?onDetach 不要求片段?
【发布时间】:2014-10-17 08:36:31
【问题描述】:

我编写了一个代码来启动 Activity A 到 Activity B。Activity A 和 B 都有片段实现。

场景:如果 Activity A 频繁启动包含 Fragment 的 Activity B,那么大多数时候它错过了 Fragment.onDetach..我检查了日志,通常它会给我以下覆盖方法日志:

  1. 附加上
  2. 列表项
  3. OnCreatView
  4. onViewCreate 然后按设备返回按钮
  5. 暂停
  6. onStop
  7. onDestroyView
  8. onDetach

现在我从 Activity B 按下设备返回按钮,该按钮再次启动 Activity A,然后它启动 Activity B 并经常重复相同的序列,然后日志序列按以下顺序更改:

  1. 附加上
  2. 列表项
  3. OnCreatView
  4. onViewCreate 然后按设备返回按钮
  5. 暂停
  6. onStop
  7. onDestroyView 并重复使用
  8. onAttach 没有 onDetach

有时它也会在 onPause 之后重复相同的行为。

我正在使用

getSupportFragmentManager().beginTransaction()
        .replace(R.id.fragment_container, fragment).addToBackStack(null).commitAllowingStateLoss(); to add fragment in Activity.

有什么我遗漏的......有什么建议吗?

【问题讨论】:

  • 所有片段事务都是异步的,也许片段管理器优化了该行为并且不分离片段只是为了在此之后重新附加它?
  • @pskink 再次重新启动相同的片段..任何建议!
  • 重新启动?对不起,我不明白
  • @dominik4142 是的,但如果想显式调用 onDetach 怎么办?
  • @pskink 因为活动共享一些公共数据,并且一次只能由一个客户端更新......但这里为同一个类创建了两个实例。

标签: android android-activity android-fragments activity-lifecycle fragment-lifecycle


【解决方案1】:

片段在销毁后被分离。你所做的事情是在破坏视图后直接分离的。 记住销毁和销毁视图是片段中的两个不同的东西。 所以尝试 onDestroyView,然后是 onDestroy,然后是 onDetach。

【讨论】:

  • onDetach 在片段被销毁但停止连接到任何活动时不会被调用!片段可以(并且应该)由片段管理器保存以供以后使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-26
  • 1970-01-01
相关资源
最近更新 更多