我有三个片段作为示于下图。 我一直在使用.xml文件中的LinearLayout加入这三个片段和我的发射活动开始时,我使用的setContentView加载.XML布局。
我有fragment2一些控制。 点击任何一个装载fragment4编程方式使用FragmentTransaction和commit方法。 这个片段被添加到屏幕上,但问题是prgrammatically添加fragment4把整个屏幕区域。 可以采取什么问题吗?
注:在任何项目在f2点击我要请仅更换新的片段F4 F2。 请记住我加入F1,F2,F3通过XML布局文件和程序添加新的片段F4。
Answer 1:
你应该随时添加,删除和替换编程的片段。 因此,我建议你使用的容器,如替换的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();
}
Answer 2:
仅保留的FrameLayout作为占位符的XML片段。 在OnCreate加载在的FrameLayout片段。 片段中的OnClick,给特定的FrameLayout的ID通过Fragment4更换。
文章来源: Replace a fragment programmatically