gpt4 book ai didi

android - 静态 fragment 与动态 fragment

转载 作者:可可西里 更新时间:2023-11-01 18:46:50 27 4
gpt4 key购买 nike

与 Java 中的动态 fragment 相比,使用 XML 中定义的静态 fragment 有哪些优缺点?以下是类别:1. 可维护性,2. 兼容性,3. 性能,4. UX

最佳答案

通过 XML 使用 fragment 或通过 Java 代码动态使用 fragment 有很大的不同,这取决于您选择的主要区别在于用户如何体验应用程序的流程。

TLDR:以下特征由通过 XML 实例化的 fragment 和使用 java 代码动态(通过 FragmentManager API)动态共享,但 Java 代码允许您更改,在运行时添加、删除每个 fragment ,从而实现否则不可能实现的灵 active

enter image description here

但要回答你的问题:

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 是一种简单的解决方案,可为这些(和其他)设备中的每一个提供不同的布局配置。 same app, different device configuration

资料来源: link

link

link

link

关于android - 静态 fragment 与动态 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23664906/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com