繁体   English   中英

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

[英]Activity onStart() being called before Fragment's onActivityCreated()

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

在我的活动中:

@Override
protected void onStart() {
    super.onStart();
    methodA(); // this is called ...
}

在我的片段中:

    @Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    methodB(); // ... before this
}

在我的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()调用的顺序?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM