在Android API 11+中,谷歌发布了一个名为Fragment的新类。

在视频中,谷歌建议,只要可能(link1, link2),我们应该使用片段而不是活动,但他们没有解释确切的原因。

片段的目的是什么以及它们的一些可能的用途(除了一些可以通过简单的视图/布局轻松实现的UI示例)?

我的问题是关于片段的:

使用片段的目的是什么? 与使用活动/视图/布局相比,使用片段的优点和缺点是什么?

奖金问题:

您能否为片段提供一些真正有趣的用途?谷歌在他们的视频里没有提到的事情? 在片段和包含它们的活动之间进行通信的最佳方式是什么? 当你使用片段时,最重要的事情是什么?从你的经验中有什么建议和警告吗?


当前回答

活动是应用程序中带有工具栏的全屏组件,其他的最好是片段。 一个带有工具栏的全屏父活动可以有多个窗格、可滚动页面、对话框等(所有片段),所有这些都可以从父活动访问并通过父活动进行通信。

例子:

活动A、活动B、活动C

所有的活动都需要有相同的代码重复,以显示基本 工具栏,或者从父活动继承 管理起来很麻烦)。 要从一个活动移动到另一个活动,要么所有活动都需要在内存中(开销),要么需要销毁一个活动以便打开另一个活动。 活动之间的通信可以通过intent完成。

vs

活动A,片段1,片段2,片段3:

没有代码重复,所有屏幕都有来自该活动的工具栏等。 几种方法从一个片段移动到下一个视图页,多窗格等。 活动拥有最多的数据,因此需要最少的片段间通信。如果仍然需要,可以通过接口轻松完成。 片段不需要全屏显示,在设计上有很大的灵活性。 如果不需要视图,则片段不需要扩展布局。 多个活动可以使用相同的片段。

其他回答

不确定你指的是什么视频,但我怀疑他们说你应该使用片段而不是活动,因为它们不能直接互换。实际上,在开发指南中有一个相当详细的条目,考虑阅读它的详细信息。

In short, fragments live inside activities, and each activity can host many fragments. Like activities, they have a specific lifecycle, unlike activities, they are not top-level application components. Advantages of fragments include code reuse and modularity (e.g., using the same list view in many activities), including the ability to build multi-pane interfaces (mostly useful on tablets). The main disadvantage is (some) added complexity. You can generally achieve the same thing with (custom) views in a non-standard and less robust way.

Fragments存在于活动中,并具有:

它自己的生命周期 自己的布局 它自己的子片段等等。

将Fragments视为它所属的主活动的子活动,它不能单独存在,它可以一次又一次地被调用/重用。希望这对你有所帮助。

片段存在于活动内部,而活动则独立存在。

片段在某些情况下特别有用,比如我们想在所有页面中保留一个导航抽屉。你可以用你想要的任何片段来膨胀框架布局,并且仍然可以访问导航抽屉。

如果您使用了一个活动,那么您将不得不在所有活动中保留抽屉,这将导致冗余代码。这是片段的一个有趣用法。

我是Android的新手,仍然认为碎片是有帮助的。

如果你以前写过前端,那么使用前端组件(React, Vue或Angular)。将片段视为活动中的可重用组件。