以编程方式替换片段
Posted
技术标签:
【中文标题】以编程方式替换片段【英文标题】:Replace a fragment programmatically 【发布时间】:2012-04-24 17:45:15 【问题描述】:我有三个片段,如下图所示。我已经使用 .xml 文件在 LinearLayout 中添加了所有这三个片段,当我的启动器活动启动时,我使用 setContentView 加载该 .xml 布局。我在片段 2 上有一些控件。点击任何一个加载 fragment4 以编程方式使用 FragmentTransaction 和 commit 方法。此片段已添加到屏幕,但问题是按语法添加的片段 4 占据了整个屏幕区域。可能是什么问题?注意:在任何项目上单击 f2 我只想用新片段 f4 替换 f2。请记住,我已通过 xml 布局文件添加了 f1、f2、f3,并以编程方式添加了新片段 f4。
【问题讨论】:
不清楚。最后你把这四个片段一起展示了吗? 【参考方案1】:您应该始终以编程方式添加、删除和替换您的片段。因此,我建议您将 F-1、F-2 和 F-3 片段替换为 FrameLayout 等容器。
基本上不是将<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
中再次执行相同的操作,将 f2 替换为 f4:
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();
【讨论】:
你有什么参考可以让我从那里举个例子吗? 谢谢。好的,我理解的是不要将片段直接放入 xml 布局中。用框架布局代替片段元素。并且在用 f2 替换 f4 时使用 f2 的框架。我对吗?你可以给参考网站看看。【参考方案2】:仅保留 FrameLayout 作为 XML 中片段的占位符。在 OnCreate 中加载框架布局中的片段。片段的 OnClick,将特定 FrameLayout 的 id 指定为 Fragment4 替换。
【讨论】:
以上是关于以编程方式替换片段的主要内容,如果未能解决你的问题,请参考以下文章