在使用 Google 架构组件和 LiveData
之前,我没有关注 onActivityCreated()
回调。
我在 SOF 和文档中都读到了这个,但我仍然无法理解这种行为。
从 SOF 答案之一:
onActivityCreated()
称为 ,当 onActivityCreated()
不称为 时?onCreateView()
但没有调用 onActivityCreated()
?通常的做法是在
LiveData
中附加 onActivityCreated()
观察者,所以我猜 onActivityCreated()
和 onCreateView()
之间有显着差异?尽管从官方 Android 文档中查看图表似乎
onActivityCreated()
被称为 在 onCreateView()
之后总是 (在执行方面,而不是顺序)并且没有区别吗?这里有些令人困惑。
更新:
onActivityCreated()
已弃用。 最佳答案
编辑: 根据 Twitter 上的 Ian Lake(参见 https://twitter.com/ianhlake/status/1193964829519667202 ),FragmentActivity
尝试在 onActivityCreated
中分派(dispatch) onStart
的事实是无关紧要的,因为无论发生什么,FragmentManager 在从 onCreate
到 onStart
时都会分派(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/