我用,
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
MyView myView = new MyView(getActivity());
myView.addViews(getViews());
return myView;
}
我知道在public void onActivityCreated (Bundle savedInstanceState){}
onCreateView();
我需要onCreateView()
中的上下文来扩充自定义布局。如何在getActivity()
之前始终获得有效的上下文(使用onActivityCreated()
)?
可能的解决方案:
View view;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment, container, false); //Contains empty RelativeLayout
return view;
}
//Now that we have activity, create custom views and add it to the empty container
public void onActivityCreated (Bundle savedInstanceState){
RelativeLayout layout = (RelativeLayout)view.findViewById(R.id.layout);
MyView myView = new MyView(getActivity());
layout.add(myView);
}
但是这种方法增加了额外的视图层次结构。
答案 0 :(得分:4)
您可以使用与Context
相关联的LayoutInflater
对象:
MyView myView = new MyView( inflater.getContext() );
答案 1 :(得分:1)
以下是生命周期调用的序列:
onAttach()
onCreate()
onCreateView()
onActivityCreated()
...
在onAttach()
之后,getActivity()
方法立即返回有效的上下文。您可以在onCreateView()
方法中安全地使用它。
onAttach()
和onActivityCreated()
之间的差异如下。创建onAttach()
活动但尚未完全初始化后。例如,如果该活动中存在多个片段,则它们尚未初始化。在onActivityCreated()
之后,活动完全初始化并创建其所有片段。此时,您可以安全地执行片段间通信。