我有三个片段,如下图所示。我使用.xml文件在LinearLayout中添加了所有这三个片段,当我的启动器活动开始时,我使用setContentView加载.xml布局。
我对fragment2有一些控制。点击任何一个加载
fragment4以编程方式使用FragmentTransaction和commit方法。这个片段被添加到屏幕上但问题是以编程方式添加的片段4占据整个屏幕区域。可能是什么问题?
注意:在任何项目上点击f2我想用新的片段f4替换f2。请记住,我已经通过xml布局文件添加了f1,f2,f3并以编程方式添加了新的片段f4。
答案 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
:
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。