onActivityCreated() 是否在 Fragment 中的 onViewCreated() 之后调用?

Jav*_*tar 8 android android-lifecycle

我有两个 ViewModel。一个仅在 Fragment 中使用,另一个是来自 Activity 的共享 ViewModel。

分段:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    viewModel = ViewModelProviders.of(this).get(FragmentViewModel.class);
    ...
}

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    activityViewModel = ViewModelProviders.of(getActivity()).get(ActivityViewModel.class);
}
Run Code Online (Sandbox Code Playgroud)

但是为了知道我是否可以使用活动的 ViewModel 中的内容,我需要知道 是否在onActivityCreated(...)之后调用,onViewCreated(...)以便我可以根据我在活动的 ViewModel 中拥有的数据在 Fragment ViewModel 中请求我的数据。

总结一下:

确定onActivityCreated(...)是在onViewCreated(...)完成后调用吗?

Jav*_*tar 14

经过一些进一步的研究,我想我找到了答案。

在 22.1.0 版本中添加了onActivityCreated void onActivityCreated (Bundle savedInstanceState)

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

基于文档:

..fragment 的视图层次结构实例化。一旦这些部分就位,它可以用于进行最终初始化。

视图层次结构应该完全实例化,因此onActivityCreated将在完成后调用onViewCreated

更新

信息:onActivityCreated现已弃用

使用 onViewCreated(View, Bundle) 用于接触 Fragment 视图的代码,使用 onCreate(Bundle) 进行其他初始化。要在调用 Fragment 活动的 Activity.onCreate(Bundle) 时专门获取回调,请在 onAttach(Context) 中的 Activity 生命周期上注册一个 androidx.lifecycle.LifecycleObserver,当它收到 Lifecycle.State.CREATED 回调时将其删除。