web-dev-qa-db-ja.com

onCreateViewフラグメントは呼び出されません

DialogFragmentを入れたいFrameLayoutコンテナを持つカスタムFragmentがありますが、そのビューは常にnullを返します。どうすればよいですか?

DialogCreateAccount.Java

   public class DialogCreateAccount extends DialogGeneral implements OnClickListener{

   @Override
   public Dialog onCreateDialog(Bundle savedInstanceState) {
    // TODO Auto-generated method stub

    Dialog dialog = super.onCreateDialog(savedInstanceState);

    //........


    return dialog;

   }


@Override
public void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

     Fragment fragment = CreateAccountFragment.newInstance();


     FragmentTransaction ft = getFragmentManager().beginTransaction();

         if(fragment.getView()!=null){ // return always null

            ft.add(
                    getFrameContainer().getId(),
                    fragment
                    )
            .commit();
         }else{

         }

        Log.i("DialogCreateAccount", "fragment:" +fragment.getView());// return null
  }

CreateAccountFragment.Javaで

 public class CreateAccountFragment extends Fragment implements OnClickListener{

        public CreateAccountFragment() {
          // TODO Auto-generated constructor stub

        }

       public static CreateAccountFragment newInstance() {

             CreateAccountFragment f = new CreateAccountFragment();

             return f;
       }

       @Override
       public void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
         super.onCreate(savedInstanceState);
         Log.i("CreateAccountFragment", "onCreate");
         //onCreate is called


       }

       @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
          // TODO Auto-generated method stub

      Log.i("CreateAccountFragment", "onCreateView");
        //onCreateView not called

          mRootView = inflater.inflate(R.layout.dialog_create_an_account, container, false);




          return mRootView;


       }
      }

フラグメントでは、onCreateが呼び出され、onCreateViewは呼び出されません。

8
Adriana Carelli

フラグメントgetView()は、フラグメントのライフサイクルでonCreateView()が実行された場合にのみ、null以外のビューを返します。

フラグメントオブジェクトをインスタンス化するだけでは、そのライフサイクルコールバックは呼び出されません。これらは、後でフラグメントトランザクションが実行されるときに呼び出されます。

getView()がnull以外を返すかどうかを条件付きでチェックせずに、フラグメントをコンテナに入れるだけです。

8
laalto

フラグメントはビューに関連付けられている必要があります。これは、xmlレイアウトで実行することもプログラムで実行することもできます。

フラグメントのドキュメント のセクション「アクティビティへのフラグメントの追加」を参照してください。

4
Okas