如何在没有 XML 的情况下以编程方式将片段添加到活动

Posted

技术标签:

【中文标题】如何在没有 XML 的情况下以编程方式将片段添加到活动【英文标题】:How to add fragments to activity programatically without XML 【发布时间】:2014-11-11 14:14:36 【问题描述】:

我有一个没有 xml 布局的活动。现在我通过以下方式将一个片段添加到活动中:

protected void onCreate(Bundle savedInstanceState) 
    profileFragment = new ProfileFragment();
    getSupportFragmentManager().beginTransaction().add(android.R.id.content, profileFragment).commit(); 

首先我不知道什么是R.id.内容,因为我没有声明它,所以它来自哪里?

其次,我如何将接下来的 2 个片段添加到 Activity 中,并将其放置在我想要的位置,而无需主 Activity 的 xml 布局(第一个片段在顶部,接下来的 2 个片段并排在第一个片段下方)?

【问题讨论】:

有什么理由不想使用 xml 布局吗?因为这是最简单的方法。 因为这让我很困惑:developer.android.com/training/basics/fragments/creating.html - “当您通过在布局 XML 文件中定义片段将片段添加到活动布局时,您无法在运行时删除片段。如果您打算在用户交互期间交换你的片段,你必须在活动第一次开始时将片段添加到活动中” 好的,我认为你的问题是你根本不想使用 xml。例如,您可以制作一个仅由 xml 中的空框架布局组成的布局。然后在代码中将片段添加到该 xml 布局 是的,现在我明白了。 【参考方案1】:

首先我不知道 R.id.content 是什么,因为我不知道 声明它,那么它来自哪里?

不是R.id.content而是android.R.id.content,它是框架的一部分

其次,我如何将接下来的 2 个片段添加到活动中并放置它 我想要的主要活动没有 xml 布局(第一个片段 顶部,和下一个并排在第一个片段下方的 2 个片段)?

您可以通过编程方式为片段创建容器(您需要告诉 Android 要将片段放置在哪里)

【讨论】:

那么,FrameLayouts 的片段占位符应该是什么? 更适合您需要的那一款。例如,如果你想让两个片段一个接一个,你可以在一个水平的 LinearLayout 中使用两个 FrameLayout 从技术上讲,您可以在代码中创建您需要的所有 FrameLayouts 和 LinearLayouts,并完全跳过使用 xml 文件,因此“您不能”部分并不是真的。但当然没有理由这样做。

以上是关于如何在没有 XML 的情况下以编程方式将片段添加到活动的主要内容,如果未能解决你的问题,请参考以下文章

按钮按下以编程方式将新行添加到 ListView,如何?

如何在没有任何按钮的情况下以编程方式关闭 UIAlertController?

如何在 Android 中不使用 XML 的情况下以编程方式动态应用 FontSize? [复制]

在没有情节提要的情况下以编程方式添加容器视图?

如何在没有 XIB 文件的情况下以编程方式更新 Xcode 中的 UILabel?

如何在不使用 HTML 表单的情况下以编程方式将 POST 请求发送到 JSF 页面?