我有一个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
条件,我最终会得到多个片段,每个片段对应一个方向更改,堆叠。
我错过了什么?
答案 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的风格