Activity onStart() 在 Fragment 的 onActivityCreated() 之前调用

2023-12-19

我遇到一个问题,我的片段在onActivityCreated()在我的活动之后调用方法onStart()方法被调用。这似乎意味着我的活动onCreate()方法完成后onStart()?不可能是这样的……可以吗?当我的 Activity 的生命周期是我的 Fragment 时onActivityCreated()叫?此外,如果我有多个片段,如何控制片段的顺序onActivityCreated() calls?

在我的活动中:

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

在我的片段中:

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

onActivityCreated() 方法在我的活动的 onStart() 方法被调用后被调用

请记住, onActivityCreated() 方法只是活动中片段的回调。

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

Wrong!Activity和fragment是分开的,所以Activity中的onCreated()方法和fragment中的onActivityCreated()方法不能相同。如上所述,在 Fragment 中它只是一个与 Activity 状态的回调映射。

Let's have a look at this picture to have a better understanding. enter image description here

谷歌官方文档中:活动 onStart()

在活动对用户可见之前调用。 如果 Activity 进入前台,则接着是 onResume();如果 Activity 变为隐藏,则接着是 onStop()。

片段回调:onActivityCreated()

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

最后一个:

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Activity onStart() 在 Fragment 的 onActivityCreated() 之前调用 的相关文章

随机推荐