何时使用片段堆叠与个人活动?

时间:2014-05-06 16:35:24

标签: android android-fragments

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

Android Fragment documentation中,他们会显示此图表:

我完全了解平板电脑用例,但对于手机用例,我不明白为什么要将每个片段放入自己的活动中。我通常创建一个活动并将片段添加到backstack(通过FragmentManager)。这些方法中的任何一种都被视为“正确”的方法吗?这样做的方法?如果两者都没问题,那么选择使用哪种方法有什么好的经验法则?

This question密切相关,但我并不完全满意。如果你应该使用单独的活动,那么首先要有一个片段叠加是什么意思?

2 个答案:

答案 0 :(得分:2)

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

我在SDK的最新版本(22.x)中注意到,生成的每个Activity只不过是Fragment的占位符。 Fragment是自动生成的,包含视图逻辑。看起来他们想让活动只是片段的占位符/控制器。我不认为我同意这一点。虽然我肯定会看到平板电脑的用例,但我觉得这种模式应该根据需要在一般情况下使用。这只是我的意见,但我认为将所有逻辑移植到Fragment中会牺牲使用Activity获得的一些好处,所以如果你需要重复使用它只是一个有用的模式特别是那个片段。

  

如果你应该使用单独的活动,那么首先有一个片段叠加是什么意思?

好问题。我个人更喜欢使用很多活动,只使用片段,我需要在多个地方重用逻辑/视图。我认为使用startActivitystartActivityForResult并允许系统管理您的活动堆栈的流程比尝试管理一个巨大的Fragment后台堆栈和一个Activity(再次,只是我的意见)要容易一些。

那么我什么时候才能使用Fragment后台堆栈?我最近使用它的情况确实非常好。我有一个需要构建一个非常复杂的对象的Activity。 Object需要向用户输入许多字段,因此我创建了一个工作流程,一次一步地引导用户完成此过程。我创建了一个Activity来处理这个逻辑的创建。 UI的每一步都是一个Fragment,它从用户那里获取输入,报告回Activity,然后Activity加载下一个Fragment。片段已添加到后台堆栈中,因此用户可以返回到工作流程中的上一步。

Object1CreationActivity

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

片段和活动之间的通信应该使用接口完成。如果我们想在其他任何地方重复使用它,这一点非常重要。因此,我可以重用大部分代码来创建另一个Object。

Object2CreationActivity

FragmentB --> FragmentD --> FragmentE

总结一下,片段,活动,后台堆栈,这些都是可以用来制作Android应用程序的强大工具。关于何时以及如何使用它们可能没有很好的经验法则,但只要您精通它们如何协同工作,就可以根据您的应用使用它们。

答案 1 :(得分:0)

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

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

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

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