【问题标题】:What are the advantages of adding a fragment via XML vs programmatically?通过 XML 添加片段与以编程方式添加片段的优势是什么?
【发布时间】:2021-04-26 09:13:56
【问题描述】:

在 Android documentation 中,我不太清楚通过 XML 添加片段与以编程方式添加片段相比有哪些优势和实际用例。

这两种方法都允许使用 Bundle 将数据从 Activity 发送到 Fragment 并返回吗?
这两种方法在活动生命周期中的行为是否相似?

一些简短的例子或参考肯定会有所帮助。

【问题讨论】:

  • advantages and practical use cases of adding fragments via XML 如果可以在 xml 中定义片段,为什么还要编写样板代码来添加片段? Do both methods allow sending data from the activity to the fragment using Bundle? 你可以自己试试。 both methods behave similarly in the activity lifecycle?你也可以试试这个

标签: android android-layout android-fragments android-activity


【解决方案1】:

这两种方法只有细微的差别。如果您在 XML 中添加片段,那么您首先会加载或创建它,然后您将获得它的实例,反之亦然。

此外,以编程方式添加片段可以让您动态更改其属性,而如果您从 XML 中添加片段,您将获得固定值。

没有太大的区别。

【讨论】:

    【解决方案2】:

    使用 FragmentContainerView 并使用 android:name 或 android:class,您可以避免仅在 savedInstanceState 为 null 或尚未添加时实例化 Fragment 的样板代码。

    如果您以编程方式执行此操作,则需要通过检查确保仅在片段尚未添加到活动时才添加片段:

    if (getSupportFragmentManager().findFragmentByTag(CUSTOM_TAG) != null)
    {
         // You can also easily add animations or pass custom data.
         getSupportFragmentManager().beginTransaction().add(R.id.container_view, YourFragment.newInstance(data), CUSTOM_TAG).commit();
    }
    

    以编程方式执行此操作可为您提供传递自定义数据的优势,并在您实际需要时添加它。在布局方法的情况下,它将在活动的布局膨胀时被实例化。但很多时候,我们不需要立即添加片段,在这种情况下,以编程方式添加片段会是更好的选择。

    【讨论】:

      【解决方案3】:

      完全没有区别。 Android 有一个从 XML 实例化对象的系统,但它总是可以与实际执行的构造函数和添加子对象的方法互换。不同之处在于方便:XML 系统允许您轻松链接其他资源,并且它具有帮助传递正确参数的功能。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-19
        • 1970-01-01
        相关资源
        最近更新 更多