是否可以在 Activity 的 onCreate() 中获取对 Fragment 子视图的引用?

Is it possible to get a reference to a Fragment's child View inside the onCreate() of Activity?

我可以使用 onCreateView() 获取片段中子视图的引用,然后在同一片段中为该视图编写 getter 方法,该方法将由 Activity 获取对视图的引用。喜欢:

@Override
public View onCreateView(LayoutInflater layoutInflater, ViewGroup container, Bundle savedInstanceState) {
    LinearLayout rootLinearLayout = (LinearLayout) layoutInflater.inflate(R.layout.my_fragment, container, false);
    javaCameraView = (JavaCameraView) rootLinearLayout.findViewById(R.id.myFragment_javaCameraView);//***********
    return rootLinearLayout;
}

JavaCameraView getCameraView() {
    return javaCameraView;
}

但问题是 我需要 Activity 的 onCreate() 中的子视图,我认为片段 onCreateView()在 Activity returns 的 onCreate() 之后调用。 Reference

那么有没有办法在 Activity 的 onCreate() 中获取对片段视图的引用?

你做错了。您不应将片段的 UI 元素暴露给宿主 activity。片段应该封装它的视图和功能。如果您真的只是将片段用作 UI 组件,请创建一个自定义视图并在 activity.

中使用它

要回答您的问题,不,您无法在 activity 的 onCreate() 中获得对片段视图的引用。原因是片段的视图在片段经历其生命周期之前不存在。无法保证什么时候会发生,这就是为什么基于这样的假设进行编码是不好的。

如果片段需要将事件传回 activity,请让您的 activity 实现一个侦听器接口,并让片段在适当的时候调用该接口。

所以在您的情况下,您可以在片段的onCreateView()

中做类似的事情
if (getActivity() instanceof Listener) {
  ((Listener)getActivity()).onViewCreated(fragmentViews);
}

但同样,这样做是错误的。

手动调用 onCreateView() 应该可行,尽管这不是一个好方法。

private JavaCameraView javaCameraView;

@Override
public View onCreateView(LayoutInflater layoutInflater, ViewGroup container, Bundle savedInstanceState) {
    LinearLayout rootLinearLayout = (LinearLayout) layoutInflater.inflate(R.layout.my_fragment, container, false);
    javaCameraView = (JavaCameraView) rootLinearLayout.findViewById(R.id.myFragment_javaCameraView);
    return rootLinearLayout;
}

JavaCameraView getCameraView(LayoutInflater layoutInflater) {
    if (javaCameraView == null) {
        onCreateView(layoutInflater, null, null);
    }
    return javaCameraView;
}

然后您可以在 onCreate() 中使用 yourFragment.getCameraView(getLayoutInflater())