Android 是否可以获取对片段的引用';活动的onCreate()中的子视图?

Android 是否可以获取对片段的引用';活动的onCreate()中的子视图?,android,android-fragments,android-activity,android-fragmentactivity,oncreate,Android,Android Fragments,Android Activity,Android Fragmentactivity,Oncreate,我可以使用onCreateView()在片段中获取对子视图的引用,然后在同一片段中为该视图编写一个getter方法,该方法将由活动调用以获取对该视图的引用。比如: @Override public View onCreateView(LayoutInflater layoutInflater, ViewGroup container, Bundle savedInstanceState) { LinearLayout rootLinearLayout = (LinearLayout) l

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

@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;
}
但问题是我需要活动的
onCreate()
中的子视图,我认为片段的
onCreateView()
是在活动的
onCreate()
返回后调用的


那么,在活动的
onCreate()
中,有没有一种方法可以获取对片段视图的引用呢?

您做错了。您不应该向宿主活动公开片段的UI元素。片段应该封装它的视图和功能。如果您确实只是将片段用作UI组件,请创建一个自定义视图并在活动中使用它

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

如果片段需要将事件传递回活动,请让您的活动实现侦听器接口,并在适当时让片段调用该接口

因此,在您的例子中,您可以在片段的
onCreateView()
中执行类似的操作

但同样,这是错误的。

手动调用
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())
如果您想在创建
javaCameraView
之后使用它,为什么不在片段中执行呢?您如何访问当时不存在的任何东西?这是一个可怕的想法。只有Android应该调用生命周期方法。
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;
}