FragmentActivity:正确的片段实例化

时间:2013-03-05 00:49:34

标签: android android-fragments android-orientation

我有一个FragmentActivity和两个Fragment,比如FrgMaster(一个ListFragment)和FrgDetail。我有两个布局XML文件:一个包含一个FrameLayout(用于纵向模式),另一个包含两个FrameLayout s(用于横向)。我想在FragmentActivity中实例化片段,所以onCreate()我有类似的东西:

if (savedInstanceState == null) {
    final FrgMaster fragment = new FrgMaster();
    // Add the fragment to the FrameLayout
    this.getSupportFragmentManager()
            .beginTransaction()
            .add(R.id.frame_for_master, fragment, FrgMaster.MY_TAG)
            .commit();
}

我浏览列表并单击位置。现在,当我更改方向时,上面的代码不起作用,因为savedInstanceState不是null;因此片段不会添加到布局中。如果我删除了if条件,我最终会得到多个片段,每个片段对应一个方向更改,堆叠。

我错过了什么?

1 个答案:

答案 0 :(得分:2)

不清楚是否在布局文件中包含片段的链接。 如果你那么你根本不需要beginTransacton()。添加(x).commit()部分。

假设您没有以XML格式添加片段,而只是在代码中添加代码,您可能会因为将代码更改为以下内容而获得一些好处:

FragmentManager manager = this.getSupportFragmentManager();
FrmMaster fragment = manager.findFragmentById(FrgMaster.MY_TAG);
if (fragment == null)
{
    manager
        .beginTransaction()
        .add(R.id.frame_for_master, fragment, FrgMaster.MY_TAG)
        .commit();
}

编辑:更改语法以遵循OP的风格