Search code examples
javaandroidandroid-fragmentsandroid-dialogfragment

onCreateView Fragment not called


I have a custom DialogFragment with a FrameLayout container in which I want to put a Fragment but its view always return null, what can I do?

In 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
  }

In 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;


       }
      }

In Fragment onCreate is called and onCreateView is not called.


Solution

  • Fragment getView() only returns a non-null view once onCreateView() has been run in the fragment lifecycle.

    Merely instantiating a fragment object does not call any of its lifecycle callbacks. They will be called later when the fragment transaction executes.

    Just put the fragment in the container without conditionally checking whether getView() returns non-null.