【问题标题】:When to use fragment backstack vs. individual activities?何时使用片段回栈与单个活动?
【发布时间】:2014-06-23 09:26:26
【问题描述】:

我已经为 Android 开发了几年,但我仍然发现自己在这个问题上来来回回:我应该什么时候在 backstack 上使用片段,而不是把每个片段放入自己的活动中?

Android Fragment documentation,他们展示了这个图表:

我完全理解平板电脑用例,但对于手机用例,我不明白为什么要将每个片段放入自己的活动中。我通常创建一个活动并将片段添加到后台堆栈(通过 FragmentManager)。这些方法中的任何一种是否被认为是“正确”的方法?如果两者都可以,那么在选择使用哪种方法时有什么好的经验法则?

This question 密切相关,但我并不完全满意。如果您应该使用单独的活动,那么首先有一个片段回栈有什么意义?

【问题讨论】:

    标签: android android-fragments


    【解决方案1】:

    我怀疑是否有正确的方法可以做到这一点。在某些情况下,有些方法可能比其他方法更好,但在大多数情况下,答案将是“视情况而定”。

    我注意到在带有 Eclipse 的 SDK 的最新版本 (22.x) 中,生成的每个 Activity 只不过是 Fragment 的占位符。 Fragment 是自动生成的并包含视图逻辑。似乎他们想让活动只不过是片段的占位符/控制器。我不认为我同意这一点。虽然我确实看到了平板电脑的用例,但我觉得这种模式应该更多地在需要的基础上使用,而不是作为一般规则使用。这只是我的观点,但我认为将 ALL 的逻辑移入 Fragment 会牺牲使用 Activity 所获得的一些好处,因此只有在需要重用时它才是有用的模式特别是那个片段。

    如果您应该使用单独的活动,那么首先有一个片段回栈有什么意义?

    好问题。我个人更喜欢使用许多活动,并且只在需要在多个地方重用逻辑/视图的地方使用片段。我认为使用startActivitystartActivityForResult 并允许系统管理您的活动堆栈的流程比尝试管理一个巨大的片段返回堆栈和一个活动要容易一些(同样,只是我的观点)。

    那么我什么时候会使用 Fragment 回栈?我最近使用它实际上有一个非常好的情况。我有一个 Activity 需要构建一个非常复杂的对象。对象需要向用户输入许多字段,因此我创建了一个工作流,让用户一步一步完成此过程。我创建了一个 Activity 来处理这个逻辑的创建。 UI 的每一步都是一个 Fragment,它接受用户的输入,向 Activity 报告,然后 Activity 加载下一个 Fragment。片段被添加到后台堆栈,因此用户可以返回到工作流程中的先前步骤。

    Object1CreationActivity

    FragmentA --> FragmentB --> FragmentC --> FragmentD
    

    Fragments 和 Activity 之间的通信应该通过接口来完成。如果我们想在其他地方重用这些,这一点很重要。因此,我可以重复使用大部分代码来创建另一个对象。

    Object2CreationActivity

    FragmentB --> FragmentD --> FragmentE
    

    总而言之,Fragments、Activity、back stack,这些都是可以用来制作Android应用的强大工具。对于何时以及如何使用它们可能没有一个很好的经验法则,但只要您精通它们如何协同工作,您就可以根据您的应用程序使用它们。

    【讨论】:

    • 关于 startActivity/startActivityForResult 的要点。如果您正在执行“Activity 作为 Fragments 的控制器”方法,它们仍然可以使用,不是吗?
    • Fragments 可以调用 startActivitystartActivityForResult,所以是的,您可以将它们完美地与 Fragments 一起使用(请注意,子 Fragment 不能与 startActivityForResult 一起正常工作)。
    【解决方案2】:

    片段是活动的轻量级替代品......这是看待它的一种方式。例如我有我的应用程序,它有大约 10-13 个屏幕。要么

    • 我为他们每个人创建一个新活动。或
    • 我只创建了一些在功能方面在逻辑上不同的活动,它们中的广告交换视图屏幕或
    • 我创建 1 个活动并将实际屏幕功能委托给片段。

    我发现第三种方式更好且更易于管理。它有点说片段允许使用框架布局选项重用视图。此外,您可以设计一种简单的方法在片段之间共享数据,而不是使用 Parceable 在活动之间共享内容的重量级方法。

    此外,Android API 人员将更多地关注基于片段的设计而不是活动,因此最好坚持标准。使用片段比使用活动稍微复杂一点,但值得努力学习它们。恕我直言,有助于创建可扩展且安静的可重复使用屏幕视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-04
      • 2019-04-24
      相关资源
      最近更新 更多