在Fragment的onActivityCreated()之前调用onStart()的活动

Gam*_*ubi 8 java android android-lifecycle android-fragments android-activity

我遇到的问题onActivityCreated()是在调用activity的onStart()方法后调用我的片段方法.这似乎意味着我的活动的onCreate()方法正在完成之后onStart()?情况不是这样......可以吗?在我的活动的生命周期中,我的片段onActivityCreated()被称为?此外,如果我有多个片段,我如何控制片段onActivityCreated()调用的顺序?

在我的活动中:

@Override
protected void onStart() {
    super.onStart();
    methodA(); // this is called ...
}
Run Code Online (Sandbox Code Playgroud)

在我的片段中:

    @Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    methodB(); // ... before this
}
Run Code Online (Sandbox Code Playgroud)

Pha*_*hai 10

在我的activity的onStart()方法被调用之后调用onActivityCreated()方法

请记住,onActivityCreated()方法只是来自活动的片段的回调.

这似乎意味着我的活动onCreate()方法在onStart()之后完成?情况不是这样......可以吗?

错误!Activity和fragment是分开的,所以Activity中的onCreated()方法和片段中的onActivityCreated()方法不能相同.如上所述,在Fragment中,它只是一个带有活动状态的回调映射.

让我们看看这张图片,以便更好地理解. 在此输入图像描述

来自Google的官方文档: Activity onStart()

在活动变得对用户可见之前调用.如果活动到达前台,则按onResume(),如果隐藏,则按onStop().

片段回调:onActivityCreated()

在创建片段的活动并且实例化此片段的视图层次结构时调用.一旦这些部分就位,它可用于进行最终初始化,例如检索视图或恢复状态.对于使用setRetainInstance(boolean)保留其实例的片段也很有用,因为此回调告诉片段何时与新活动实例完全关联.这是在onCreateView(LayoutInflater,ViewGroup,Bundle)之后和onViewStateRestored(Bundle)之前调用的.

最后一个:

此外,如果我有多个片段,我如何控制片段的onActivityCreated()调用的顺序?

这取决于您使用哪种方式将片段添加到活动中.基本上,顺序将是添加的片段的顺序.