3

我用,

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

但是这种方法增加了一个额外的视图层次。

4

2 回答 2

4

您可以使用与Context关联的对象LayoutInflater

MyView myView = new MyView( inflater.getContext() );
于 2014-07-09T09:32:04.773 回答
1

以下是生命周期调用的顺序:

  • onAttach()
  • onCreate()
  • onCreateView()
  • onActivityCreated()
  • ...

紧接着onAttach()getActivity()方法返回一个有效的上下文。您可以安全地在onCreateView()方法中使用它。

onAttach()和之间的区别onActivityCreated()如下。onAttach()创建活动但尚未完全初始化之后。例如,如果该活动中有几个片段,则它们尚未初始化。之后onActivityCreated(),Activity 被完全初始化并创建了它的所有片段。这时候你就可以安全地进行片段间的通信了。

于 2013-11-01T22:50:33.150 回答