2012-04-12 60 views
19

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

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

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

enter image description here以编程方式替换片段

+0

它不清楚。你在最后把所有的四个片段放在一起吗? – 2012-04-12 11:45:05

回答

33

你应该总是以编程方式添加,删除和替换你的片段。因此,我建议你用诸如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。然后你用f4替换f2再做同样的事情你的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(); 
} 
+0

你有什么参考资料,我可以从那里举个例子吗? – MobiDev 2012-04-12 12:25:25

+1

我编辑了我的答案。这应该解决你的问题。 – CodePrimate 2012-04-12 13:31:14

+1

谢谢。好的我明白的是不要将碎片直接放入xml布局中。将framelayouts代替片段元素。同时用f2替换f4使用f2的帧。我对吗?你可以给参考网站检查出来。 – MobiDev 2012-04-12 13:51:50

2

仅保留FrameLayout作为XML中片段的占位符。在OnCreate中加载框架布局中的片段。 OnClick的片段,给这个特定的FrameLayout的ID来代替Fragment4。

相关问题