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()、アクティビティは完全に初期化され、そのすべてのフラグメントが作成されます。この時点で、安全にフラグメント間通信を行うことができます。

于 2013-11-01T22:50:33.150 に答える