是否可以在 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())
。
我可以使用 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())
。