我有一个完整的应用程序,它不是使用Fragments
开发的。我的困惑是,我应该将其更改为Fragments
而不是Activities
。我想说的是,我在我的应用程序中只使用纵向方向而且它是构建的,记住只有手机,而不是平板电脑。所以我的问题是,如果我改变应用程序的整个结构并使用Fragments
,它会有用吗。
据我所知,Fragments只能用于我们想要重用的东西。任何建议都表示赞赏。
答案 0 :(得分:11)
Fragments
可用于创建动态和多窗格用户界面,因此非常适合具有更多屏幕空间的平板电脑。当然,在手机上情况稍有不同,你有一个更小的空间可以玩,有时只是为了让一个Activity
适合屏幕而不用担心包含多个{{1 }}
Fragments
非常适合动态界面,并有助于平板电脑和手机之间的兼容性。他们还能够比活动更好地相互通信,因此即使在仅限电话的设置上使用它们也有一定的优势。 (有关可用于的某些功能,请参阅Fragments
)
使用示例如下图所示(摘自Android开发者网站)
这说明了FragmentsManager
的灵活性,它可以在平板电脑上占据同一个屏幕,在手机上切换到类似活动的格式。正是这种力量使Fragments
比Fragment
更具优势。
很明显,在灵活性方面切换到Activity
定位解决方案是有好处的,但您的原始问题表明您只针对手机,而且只是纵向定位。
拥有Fragment
已存在的应用程序,假设它是您满意的解决方案,并具有良好的可用性,我会说没有理由切换到Activities
(除非你正在寻找挑战或有空闲时间并且想要修补一剂。虽然存在优势,但强烈的变化(如添加碎片)可能会在应用程序中引入错误并影响用户体验(至少在短期内)。
从长远来看,如果您考虑将平板电脑支持放入折叠或想要使用横向方向,那么最好开始考虑使用Fragments
来做什么>改善体验,并将其与手机应用程序的当前流程集成。
否则,您创建的当前解决方案将绰绰有余,只要您的客户群能够轻松接收,我认为没有理由改变。
当然,对于未来的项目,或者是时候刷新当前项目的UI,无法熟悉Fragment API 。
值得指出的是,Fragments
仅支持Android 3.0(API级别11),为支持早期设备,您需要在安装中找到 Android支持包 。因此,如果您当前的应用程序以2.x设备为目标,我会坚持使用基于活动的方法,为了简单和.apk大小,除非转移到本机API级别(如Android 3.0+)。 这是个人偏好,但最终原始问题的答案将归结为您的个人偏好。
答案 1 :(得分:4)
将片段视为将代码模块化为可管理片段的一种方式。每个片段代表一小部分功能和UI。这使您可以轻松调整代码以适应不同的场景。
当然,您现在不打算支持平板电脑(无论平板电脑用户如何安装该应用),请考虑使用更大尺寸的5-6“设备以及将应用扩展到它们的潜力。最好将应用程序提供给尽可能多的设备,最好的应用程序将为设备定制体验。
向片段的过渡并不困难。获取一小部分功能并将其移至片段。然后你会看到新模式是多么容易和灵活。您不需要重写整个应用程序,因为活动和片段可以一起工作。
我相信通过跳过Fragments,从长远来看,你的开发任务实际上要困难得多。
答案 2 :(得分:3)
如果您将来不打算支持平板电脑,请将其保留原样。将应用转换为片段时,您将无法获得任何收益。
如果您启动新应用程序,情况会有所不同。我会从一开始就使用片段,以便在需要支持其他形式因素时更灵活。请注意,该功能在支持库中可用,因此您也可以在旧设备上使用它。
答案 3 :(得分:2)
在片段之间设置交互比在活动之间设置交互更容易。
如果是活动:
startActivityForResult()
/ onActivityResult()
; Parcelable
接口才能在活动之间传递; 如果是碎片:
FragmentManager
获取片段实例并在其上调用方法一样简单; Parcelable
; 此外,Fragment
的实例比Activity
的实例更轻量级,并且需要更少的时间和资源来初始化/恢复。
通常,当您使用片段时,UI组件之间的交互更清晰,更优雅,更容易实现。
答案 4 :(得分:1)
就您的应用程序或任何应用程序而言,最好使用碎片并且它不会对您的应用程序造成任何伤害,同时还可以减轻您的负担,同时进一步扩展您的平板电脑应用程序。所以,最好先从在您的应用程序中使用片段。
答案 5 :(得分:1)
我刚刚完成转换我的应用程序以使用片段,因为:
这些是使用片段的最令人信服的理由。
可能需要更多工作,但随着市场上出现更多平板电脑和快速采用率,或许值得考虑支持具有更好用户界面的平板电脑?
如果你真的不想这样做并且不需要使用高级视图进行视图分页,那么就没有必要对项目进行过度设计,以使其使用片段来使用片段。你可能会说你可能会了解它们,但是当你在下一个项目中使用它们时,你就可以学习(这就是我所做的并且效果很好)。