编程方式替换片段(Replace a fragment programmatically)

2019-07-28 22:32发布

我有三个片段作为示于下图。 我一直在使用.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