1

我有 aFragmentActivity和两个Fragments,比如说FrgMaster(a ListFragment) 和FrgDetail。我有两个布局 XML 文件:一个包含一个FrameLayout(用于纵向模式),一个包含两个FrameLayouts(用于横向)。我想实例化我的片段,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();
}

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

我错过了什么?

4

1 回答 1

2

不清楚您是否在布局文件中包含指向片段的链接。如果你是,那么你根本不需要 beginTransacton().add(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 的风格

于 2013-03-05T01:04:07.493 回答