- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
与 Java 中的动态 fragment 相比,使用 XML 中定义的静态 fragment 有哪些优缺点?以下是类别:1. 可维护性,2. 兼容性,3. 性能,4. UX
最佳答案
通过 XML 使用 fragment 或通过 Java 代码动态使用 fragment 有很大的不同,这取决于您选择的主要区别在于用户如何体验应用程序的流程。
TLDR:以下特征由通过 XML 实例化的 fragment 和使用 java 代码动态(通过 FragmentManager
API)动态共享,但 Java 代码允许您更改,在运行时添加、删除每个 fragment ,从而实现否则不可能实现的灵 active 。
但要回答你的问题:
1 - 可维护性 - 大致相同,您使用 android:name 属性定义要使用 VS 的 fragment
类:
// get fragment manager
FragmentManager fm = getFragmentManager();
// add fragment
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.your_placehodler, new YourFragment());
// alternatively add it with a tag
// trx.add(R.id.your_placehodler, new YourFragment(), "detail");
ft.commit();
在只有一笔交易的情况下,这两种方式几乎没有任何努力。
2 - 兼容性:大致相同,各地的开发人员都经常使用
3 - 性能,一次性膨胀过程可能会快一点,但它们基本上是均匀的。
4 - UX:根据您的需要,可能没有区别也可能很大。
那么 XML 或“动态 fragment ”之间的巨大区别是什么?
通过直接 XML 膨胀实例化的 fragment 不能在运行时通过 FragmentManager 进行动态管理。
例如,这意味着一旦您膨胀了 fragment/布局,您就无法将其发送到后台堆栈并快速将另一个放在前面。 fragment 的动态管理可用于在一个多用途 Activity 中为用户提供快速的单流体验,如果您从一个 Activity 跳到下一个 Activity ,这是不可能获得的。
在上面的初始 FragmentTransaction 之后,您可以绝对自由地快速为其他 fragment 重用相同的布局容器
// replace
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.your_placehodler, new YourFragment());
ft.commit();
// remove
Fragment fragment = fm.findFragmentById(R.id.your_placehodler);
FragmentTransaction ft = fm.beginTransaction();
ft.remove(fragment);
ft.commit();
“那么为什么我们有 XML 实例化 fragment ?我们应该立即禁止它们!”
没那么快,例如,如果您的目的只是在您的应用中拥有一个多 Pane 窗口/布局,并且在其生命周期内不会改变太多(即,如果您可以坚持使用该布局直到取消 Activity )xml 膨胀不会有任何缺点,并且根据 fragment 的数量,您可以省去大量样板 FragmentTransactions 代码。
另一个重要用例可能是简单地准备使用不同的设备配置
,例如屏幕尺寸,或不同的< strong>屏幕方向(就像在平板电脑和手机纵向/横向上使用应用程序时),XML 是一种简单的解决方案,可为这些(和其他)设备中的每一个提供不同的布局配置。
资料来源: link
关于android - 静态 fragment 与动态 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23664906/
我有一个像这样的 fragment 栈 F1 -> F2 -> F3 -> F4 -> F5 现在我需要删除 F2、F3、F4 fragment 。 我需要如果我从 F5 fragment 按下后退按
我需要帮助来理解以下场景的工作原理以及如何实现结果。 我有一个名为 ShoppingCart 的类。它有一个名为 addItemsToShoppingCartFromPreviousOrder 的方法
我有一个包含 ViewPager 的 fragment 。这个 ViewPager 显然是由其他 Fragments 填充的。 我的问题是,ViewPager 中的 Fragment 是否有任何方法(
所以我正在实现一个 FragmentActivity 并尝试添加一个 fragment ,但是我遇到了多个问题。我以前做过这个,实际上我使用的代码与上一个项目(它工作的地方)相同,但由于某种原因它在这
Closed. This question needs details or clarity。它当前不接受答案。
我想将 Android X fragment (androidx.fragment.app.Fragment) 转换为 Android native fragment (android.app.Fra
假设我有一个包含 10 列文本类型 (20) 的 SQLite 表。 ListFragment 将从数据库中提取 4 列并使用 SimpleCursorAdapter 显示在列表中。 选择后,List
我有一个对话框 fragment ,我为延迟初始化创建了一个类。当我显示对话框时,它显示正常。但是,当我关闭对话框时,它崩溃的原因是: fragment 与 fragment 管理器无关。 我也尝试过
我想在 View 分页器更改为 fragment 时刷新该 fragment 。 package com.mcivisoft.rcbeam; import android.os.Bundle; imp
我有一个名为的 Activity MainActivity 我在容器 R.id.mainContainer 中添加了 fragment “BenefitFragment”。 在 BenefitFrag
所以我有这个 ClientListView,效果很好,可以显示客户,我可以单击一个客户并在右侧获取他们的详细信息(在我的第二个 fragment 中)。由此处的布局定义: 这很好用,但后来我
我试过这段代码,但点击第一个 fragment 中的按钮并没有改变第二个 fragment 中的字符串值。 这是第一个 fragment 的 kotlin 文件。它有两个按钮,点击它们可以更改字符串值
我有以下情况:我打开 fragment A 和目标,通过按钮的单击事件转到 fragment B。当我在 fragment B 中并点击后退按钮(为了返回 fragment A) 我想将一些参数传递给
我制作了一个 NavigationDrawer fragment ,其中包含 Home、Settings、Feedback 等项目。 home 项在点击 home 时应该打开,home 是在应用程序启
我正在一个接一个地替换 2 个 fragment ,两个 fragment 都有不同的选项菜单。当我替换第二个 fragment 时,它也显示第一个 fragment 的菜单。 setHasOptio
我有问题: android.app.Fragment$InstantiationException: Unable to instantiate fragment ${packageName}.${a
我正在研究 fragment 转换。当我用第二个 fragment 替换第一个 fragment 时,它出现在第一个 fragment 的下方。我希望它移动到第一个 fragment 之上。我该怎么做
我在抽屉导航里总共有 12 个 fragment 。每个 fragment 都有 volley 方法。每个 fragment 都显示自己的 Volley 响应,除了 position = 1 和 po
我在我的 Activity 中使用了两个 fragment 。最初我将向 Activity 添加一个 fragment 。然后在第一个 fragment 中使用监听器我想用第二个 fragment 替
我正在实现一个“fragments-101”程序,当相应的按钮被点击时我会替换一个 fragment 。然而,下面的事情发生了: 为什么会这样?为什么初始 fragment 没有被完全替换?MainA
我是一名优秀的程序员,十分优秀!