1

我可以使用onCreateView()来获取对片段中子视图的引用,然后在此视图的同一片段内写入一个getter方法,该方法将由Activity调用以获取对视图的引用。像:是否可以在Activity的onCreate()内部获得对Fragment的子View的引用?

@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()了。 Reference

那么有没有办法在活动的onCreate()内获得对片段视图的引用?

+1

如果您希望在创建时使用'javaCameraView'完成某些操作,为什么不直接在Fragment中执行? – NoChinDeluxe

+1

您将如何访问当时不存在的任何内容? –

回答

3

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

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

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

所以你的情况,你可以做这样的事情在该片段中的onCreateView()

if (getActivity() instanceof Listener) { 
    ((Listener)getActivity()).onViewCreated(fragmentViews); 
} 

但同样,这是做错了。

-1

手动调用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())

+2

这是一个可怕的,可怕的想法。只有Android应该调用生命周期方法。 –

+0

我知道,我写这不是一个好方法 –

相关问题