为什么要使用Fragment?

6
我已阅读有关此主题的文档和其他问题线程,但并不完全信服;我并不清楚这种技术的使用限制。 片段现在被视为最佳实践; 每个活动基本上都应该支持一个或多个片段,而不是直接调用布局。
片段的创建是为了:
  1. 允许Activity使用多个片段,在它们之间进行切换,重用这些单元... ==> Fragment完全依赖于活动的Context,因此如果我需要一些通用的东西,可以在许多活动中重用和处理自己的自定义布局或视图... 我不会关心片段会添加的额外复杂度开发层。

  2. 更好地处理不同的分辨率 ==> 对于长时间的过程,在平板电脑/手机中我们可以在同一个活动中显示两个(或更多)片段,在手机中逐个显示。但是为什么我总是要使用片段?

  3. 处理回调以在片段之间导航(例如:如果用户已登录,则显示一个片段,否则显示另一个片段)。 ===> 只需尝试查看Facebook SDK登录由于此问题而存在的许多错误,就可以真正地理解它是否有用...

  4. 考虑到Android应用程序基于活动... 在活动中添加其他生命周期将更好地设计应用程序...我的意思是模块、场景、数据管理和连接将以更好的方式进行设计。 ===> 这是一个习惯于以片段视角看待Android SDK和Android Framework的人的答案。我不认为这是错的,但我不确定它会产生好的结果...而且它真的很抽象...

====> 为什么我要让生活变得更加复杂,编写更多代码,一直使用它们?如果它只是某些情况下的工具,那么为什么这是最佳实践呢?这些情况是什么?

如果我写得太多了,对不起,感谢您的时间。我希望能引起您的注意,因为我真的需要关于这个话题的想法和经验。

最好的问候,Ahmed


7
如果你可以轻松地没有它们而生活,那就忘记它们吧……我也认为人们代码中至少50%的使用是多余的。 - pskink
hhhh +1 有趣且真实的回答 - ahmed_khan_89
可能是重复的问题:[使用碎片还是不用碎片-嵌套碎片对抗活动。 为什么我应该使用多个Activity?](https://dev59.com/b2Ij5IYBdhLWcg3wv3m2) - Frame91
是的,这是真的,我不是唯一一个有这个问题的人。那是很久以前的事了...如果我现在问这个问题,我会说“为什么不使用片段呢?”... - ahmed_khan_89
3个回答

2

你不应该总是使用片段。片段有其用途,例如当您想要分页屏幕的某些部分或者在不同方向上要大幅改变UI时。当它们有意义时,请使用它们。当它们没有意义时,请跳过它们。我发现它们在大约10-20%的应用程序中有意义 - 我很少看到需要使用它们。


2
最大的问题是,什么时候和为什么它们“有意义”并没有得到回答。在我看来,这是一个“无意义”的回答... - WarrenFaith

1
如果除了通过不同布局简单地重复使用逻辑之外还有某些正面方面,那么Fragment的能力就是系统在方向更改时保持其实例的能力,即当Activity从零开始重建时,Fragment可以保留其实例。因此,与Activity相比,使用它们更加稳定。此外,切换Fragment也更快。
个人而言,如果我不需要处理不同方向和布局大小,我仍然更喜欢使用Fragment和一个单一的容器Activity,以获得稳定性和无缝切换不同屏幕的体验。

在片段之间切换并不比在视图之间切换更快。当然,它比在活动之间切换要快。好处在于方向。谢谢。 - ahmed_khan_89

1
这是一个比较普遍的问题,与具体的编程问题没有直接关系。但在我看来,好的软件基于良好的设计,因此需要有良好的理解和最佳实践。因此,您的问题对于stackoverflow来说是一个好问题。
那么,碎片怎么样呢?我花了一些时间才明白为什么可以或甚至应该使用它们。正如@pskink所说,你可以很容易地不用它们。但如果你计划在不同的设备上推出你的软件,你应该考虑使用碎片。
屏幕分辨率和密度不是唯一的问题。想想智能手机。屏幕要小得多,因此无法像平板电脑那样以相同的方式展示应用程序。例如主细节流。左侧是元素列表,当你点击一个元素时,你将在右侧看到该元素的详细信息。在平板电脑上很容易做到。但在智能手机上,你会把主视图放到一个片段中,将详细视图放到另一个片段中。
你有两个选择来实现这种情况。要么为智能手机和平板电脑编写不同的活动,但由于它们实际上执行相同的逻辑,更好的做法是将逻辑放入片段中,并在两个布局(手机/平板电脑)中重用这些片段。

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