我可以安全地使用' getChildFragmentManager'在' onCreateView'?

时间:2014-11-13 00:48:59

标签: android android-fragments

为什么getChildFragmentManager可以在创建视图之前获取并替换片段?

我有这个代码(继承自以前的开发人员),这成功。

简化代码

public class HostFragment extends Fragment {    
       @Override
       public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        MyFragment myfragment = new MyFragment();
        getChildFragmentManager().beginTransaction()
                .replace(R.id.framelayout, myfragment).commit();

        return inflater.inflate(R.layout.fragment_layout, container, false);
       }  
   }

fragment_layout.xml

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <FrameLayout
        android:id="@+id/framelayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="10dp">
    </FrameLayout>
</LinearLayout>

我对此有点困惑。如果视图不存在,怎么可能?

1 个答案:

答案 0 :(得分:1)

是的,你可以。 commit()不会立即运行,它将在onCreateView()之后执行。但你最好在充气后称之为。代码将更清晰。

FragmentTransaction.commit()

  

计划此交易的提交。提交不会立即发生;它将被安排为主线程上的工作,以便在下一次线程就绪时完成。