在使用 Google 架构组件和 LiveData 之前,我没有关注 onActivityCreated() 回调。
我在 SOF 和文档中都读到了这个,但我仍然无法理解这种行为。
从 SOF 答案之一:

  • 在什么情况下 onActivityCreated() 称为 ,当 onActivityCreated() 不称为 时?
  • 是否有可能调用了 onCreateView() 但没有调用 onActivityCreated()

  • 通常的做法是在 LiveData 中附加 onActivityCreated() 观察者,所以我猜 onActivityCreated()onCreateView() 之间有显着差异?
    尽管从官方 Android 文档中查看图表似乎 onActivityCreated() 被称为 onCreateView() 之后总是 (在执行方面,而不是顺序)并且没有区别吗?
    这里有些令人困惑。
    android - 当 Fragment onActivityCreated 被调用时-LMLPHP
    更新:onActivityCreated() 已弃用。

    最佳答案

    编辑: 根据 Twitter 上的 Ian Lake(参见 https://twitter.com/ianhlake/status/1193964829519667202 ),FragmentActivity 尝试在 onActivityCreated 中分派(dispatch) onStart 的事实是无关紧要的,因为无论发生什么,FragmentManager 在从 onCreateonStart 时都会分派(dispatch)它。



    所以我下面说的其实是错误的。

    显然在 Fragment 中使用 onActivityCreated 等同于使用 onViewCreated

    但这也意味着您不应该依赖 onActivityCreated 来了解您的 Activity 是否实际创建,因为它被调用的次数比实际创建 Activity 的次数要多。

    fragment 令人困惑。



    原始答案:



    更新:不,这是不可能的。

    原文: 是的,在 FragmentPagerAdapter 中,他们使用 FragmentTransaction.detach/FragmentTransaction.attach ,这会导致 View 被销毁,但 Fragment 保持 Activity 状态(已停止,但未销毁)。

    在这种情况下, .attach() 运行 onCreateView ,但不运行 onActivityCreated



    更新:没关系,尽管 onViewCreated 仍然更清晰

    原文: 这实际上是一个 不好的做法 ,应该在 onViewCreated 中完成,提供 getViewLifecycleOwner() 作为生命周期所有者。



    更新: 尽管 FragmentActivity 只尝试发送一次,但所有 Fragment 总是通过 onActivityCreated ,因为这就是 FragmentManager 的工作方式。

    原文: 它并不总是在 onCreateView 之后被调用,事实上,它更多地被称为“在 onStart 之前,但只有一次”。



    更新: 但显然这对 FragmentManager 来说并不重要,因为无论哪种方式它都是 CREATED -> ACTIVITY_CREATED -> STARTED

    关于android - 当 Fragment onActivityCreated 被调用时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58737773/

    10-10 04:18