以编程方式替换片段

时间:2012-04-12 11:24:20

标签: android replace fragment

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

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

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

enter image description here

2 个答案:

答案 0 :(得分:34)

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

基本上不是将<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做了这个。然后,在OnClickListener

中再次执行相同的操作,将f2替换为f4
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();   
}

答案 1 :(得分:2)

仅将FrameLayout保留为XML中片段的占位符。在OnCreate中加载framelayout中的片段。单击片段,将特定的FrameLayout的id替换为Fragment4。