在应用程序中使用片段感到困惑

5
我有一个完整的应用程序,它没有使用Fragments开发。我的困惑是,我是否应该将其更改为使用Fragments而不是Activities。我想说的是,我在我的应用程序中只使用纵向方向,并且它是针对手机而建立的,而不是平板电脑。所以我的问题是,如果我改变整个应用程序的结构并使用Fragments,会有什么好处。
据我所知,只有当我们想要重用某些内容时才应该使用Fragments。欢迎任何建议。
6个回答

11
Fragments可以用于创建动态和多面板用户界面,因此非常适合拥有更多屏幕空间的平板电脑。当然,在手机上情况有所不同,您只有很小的空间可供使用,有时仅将一个Activity适配到屏幕上可能就很困难,更不用说包含多个Fragments了。 Fragments非常适合动态界面,并有助于在平板电脑和手机之间实现兼容性。它们也能够比Activities更好地相互通信,因此即使在仅使用手机的设置中使用它们也有明显的优势。(请参见FragmentsManager以了解一些它们可用于的功能)
下图是从Android开发者网站获取的示例,说明了如何使用Fragments(跨平板电脑和手机): Fragments across Tablet and Phone 这说明了Fragments的灵活性,它可以在平板电脑上占据同一屏幕,并在手机上切换到更类似于Activity的格式。正是这种功能赋予了FragmentActivity更大的优势。
很明显,采用基于Fragment的解决方案在灵活性方面具有优势,但您最初的问题说明您只针对手机,并且仅处于纵向方向。

如果已经存在使用Activities的应用程序,并且您对其解决方案感到满意并具有良好的可用性,则我认为没有理由切换到Fragments(除非您正在寻找挑战或有一些空闲时间和喜欢尝试)。虽然存在优点,但是像添加Fragments这样的重大更改可能会引入错误到您的应用程序中,并影响用户体验(至少在短期内)。

从长远来看,如果您考虑将平板支持融入其中或想使用横向方向,则可能需要开始查看您可以通过Fragments做些什么以改善体验,并将其与您当前的手机应用程序流程集成。

否则,您创建的当前解决方案将足以满足需求,只要您的客户群体接受良好,我认为没有理由进行更改

当然,熟悉Fragment API对于未来的项目或者当前项目UI刷新时都没有坏处。值得指出的是,Fragment仅在Android 3.0(API级别11)及以上版本中被原生支持,如果要支持早期设备,需要安装你的安装包中的Android Support包。因此,如果你的应用程序针对2.x设备,建议采用基于Activity的方法,以保持简单和apk大小,除非升级到本地API级别(如Android 3.0+)。这是个人偏好,最终回答你的问题将取决于你的个人喜好。

除非您正在寻找挑战或有一些闲暇时间并想要尝试一下,否则这个(unless you are looking for a challenge or have some spare time and fancy a tinker)不是必需的。如果您计划继续开发Android应用程序,迟早需要使用片段。因此,也许这是一个学习的好地方? - anthropomo

4
将代码模块化成可管理的部分,可以把片段视为一种方式。每个片段代表一小部分功能和UI。这样可以轻松地调整代码以适应不同的情况。即使您现在不打算支持平板电脑(无论平板电脑用户是否安装该应用程序),也要考虑到更大的5-6英寸设备的潜力,并将应用程序扩展到它们上面。最好尽可能向多种设备提供应用程序,而最好的应用程序会根据设备量身定制体验。过渡到片段不必困难。只需将一小部分功能移动到片段中即可。然后您就会看到新模式有多么简单和灵活。您无需重写整个应用程序,因为活动和片段可以共同工作。我认为,如果跳过片段,长期来看会使您的开发任务变得更加困难。

3

如果您未来不计划支持平板电脑,请将其保持原样。将应用程序转换为片段并没有任何好处。

如果您开始一个新的应用程序,则情况会有所不同。我建议从一开始就使用片段,以便在未来需要支持其他形态因素时更加灵活。请注意,此功能可在支持库中使用,因此您也可以在旧设备上使用它。


2

使用片段之间的交互比使用活动之间的交互更容易。

在活动的情况下:

  1. 您需要使用 startActivityForResult()/onActivityResult()
  2. 您的自定义类型必须实现 Parcelable 接口才能在活动之间传递;
  3. 当您的活动暂停/停止时,您必须释放所有资源。

在片段的情况下:

  1. 传递数据就像从 FragmentManager 获取片段实例并在其上调用方法一样简单;
  2. 不需要实现 Parcelable
  3. 您可以在包含所有片段的活动中持有对 "重" 资源的引用,并仅初始化/释放它们一次(无需为每个片段进行初始化/释放)。

此外,Fragment 实例比 Activity 实例更轻量级,需要更少的时间和资源来初始化/恢复。

总的来说,当您使用片段时,UI 组件之间的交互更加清晰、优雅、易于实现。


1

我刚刚完成了将我的应用程序转换为使用片段的工作,因为:

  1. 想要一个平板电脑版本
  2. 想要使用ViewPageIndicatorViewPager与高级视图

这些是使用片段的最有说服力的理由。

这可能需要更多的工作,但随着市场上出现越来越多的平板电脑并且快速采用率,也许考虑支持具有更好用户界面的平板电脑是值得的?

如果您真的不想这样做,并且没有使用高级视图进行视图分页的要求,那么过度设计项目以使其使用片段是没有意义的。您可以争辩说您可能会学习它们,但当您在下一个项目中使用它们时,您可以在那时学习(这就是我所做的,效果很好)。


1

就您的应用程序或任何应用程序而言,最好使用片段,这不会对您的应用程序造成任何损害,并且在进一步扩展到平板电脑时也可以减轻您的负担。因此,最好从在应用程序中使用片段开始。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接