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;
}