21

我有三个片段,如下图所示。我已经使用 .xml 文件在 LinearLayout 中添加了所有这三个片段,当我的启动器活动启动时,我使用 setContentView 加载该 .xml 布局。

我对 fragment2 有一些控制。单击任何一个,使用 FragmentTransaction 和 commit 方法以编程方式加载 fragment4。此片段已添加到屏幕,但问题是按语法添加的片段 4 占据了整个屏幕区域。可能是什么问题?

注意:在任何项目上单击 f2 我只想用新片段 f4 替换 f2。请记住,我已经通过 xml 布局文件添加了 f1、f2、f3,并以编程方式添加了新的片段 f4。

在此处输入图像描述

4

2 回答 2

39

您应该始终以编程方式添加、删除和替换您的片段。因此,我建议您将 F-1、F-2 和 F-3 片段替换为 FrameLayout 等容器。

基本上,不是将<fragment/>元素作为 F-1,而是将其作为<FrameLayout/>元素。然后在 FragmentActivity 的 onCreate 中执行片段事务:

Fragment1 f1 = new Fragment1();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.f1_container, f1); // f1_container is your FrameLayout container
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();  

现在,假设您为 F-1、F-2 和 F-3 完成了此操作。然后,通过在您的 中再次执行相同的操作,将 f2 替换为 f4 OnClickListener

public void onClick(View v) {
    Fragment4 f4 = new Fragment4();
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    ft.replace(R.id.f2_container, f4); // f2_container is your FrameLayout container
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
    ft.addToBackStack(null);
    ft.commit();   
}
于 2012-04-12T11:49:10.657 回答
2

仅保留 FrameLayout 作为 XML 中片段的占位符。在 OnCreate 中加载框架布局中的片段。片段的 OnClick,将特定 FrameLayout 的 id 指定为 Fragment4 替换。

于 2012-04-12T11:29:23.283 回答