【问题标题】:onCreateView Fragment not called未调用 onCreateView 片段
【发布时间】:2014-08-22 10:16:03
【问题描述】:

我有一个自定义的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 未被调用。

【问题讨论】:

  • 为什么要查看fragment.getView()!=null
  • 因为 fragment.getView() 返回 null

标签: java android android-fragments android-dialogfragment


【解决方案1】:

片段getView() 仅在片段生命周期中运行onCreateView() 后返回非空视图。

仅仅实例化一个片段对象不会调用它的任何生命周期回调。稍后片段事务执行时会调用它们。

只需将片段放入容器中,无需条件检查getView()是否返回非空。

【讨论】:

    【解决方案2】:

    您的片段必须与视图相关联。这可以通过 xml 布局或以编程方式完成。

    参见Fragments documentation,“将片段添加到活动”部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多