以编程方式替换片段

Mob*_*Dev 19 android replace fragment

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

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

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

在此输入图像描述

Cod*_*ate 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();  
Run Code Online (Sandbox Code Playgroud)

现在,假设你已经为F-1,F-2和F-3做了这个.然后你再次在f4中用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();   
}
Run Code Online (Sandbox Code Playgroud)