协慌网

登录 贡献 社区

困境:何时使用碎片与活动:

我知道Activities旨在代表我的应用程序的单个屏幕,而Fragments被设计为可重用的 UI 布局,其中嵌入了逻辑。

直到不久前,我开发了一个应用程序,因为它说应该开发它们。我创建了一个Activity来表示我的应用程序的屏幕,并使用 Fragments for ViewPagerGoogle Maps 。我很少创建一个可以多次重用的ListFragment或其他 UI。

最近我偶然发现了一个只包含 2 个Activities的项目,一个是SettingsActivity ,另一个是MainActivityMainActivity的布局中填充了许多隐藏的全屏 UI 片段,只显示了一个。在Acitivty逻辑中,应用程序的不同屏幕之间有许多FragmentTransitions

我喜欢这种方法的原因是因为应用程序使用ActionBar ,它保持不变并且不随屏幕切换动画移动,这就是Activity切换所发生的情况。这为这些屏幕转换提供了更流畅的感觉。

所以我想我要问的是分享你关于这个主题的当前开发方式,我知道它看起来可能看起来像一个基于意见的问题,但我把它视为一个 Android 设计和架构问题... 不是真的基于意见的一个。

更新(01.05.2014):继来自SquareEric Burke 的演示之后(我不得不说这是一个很棒的演示文稿,为 Android 开发人员提供了许多有用的工具。而且我与 Square 没有任何关系)

http://www.infoq.com/presentations/Android-Design/

根据我过去几个月的个人经验,我发现构建应用程序的最佳方法是创建一组片段,这些片段代表应用程序中的并在一个Activity显示所有这些片段。所以基本上你的应用程序中的Activities数量与流量数量相同。这样,操作栏在所有流程的屏幕上保持完整,但正在重新创建流程,这很有意义。正如埃里克伯克所说,并且我也已经认识到,尽可能少地使用Activities的理念并不适用于所有情况,因为它在他所谓的 “上帝” 活动中造成混乱。

答案

专家会告诉你:“当我看到 UI 时,我会知道是使用Activity还是Fragment ”。在一开始这没有任何意义,但是到时候,你实际上能够判断你是否需要Fragment

有一种很好的做法,我发现对我很有帮助。当我试图向女儿解释一些事情时,我突然想到了。

即,想象一个代表屏幕的框。你可以在这个盒子里加载另一个屏幕吗?如果您使用新的盒子,是否需要从第一个盒子中复制多个项目?如果答案是肯定的,那么你应该使用Fragments ,因为 root Activity可以容纳所有重复的元素,以节省你创建它们的时间,你可以简单地替换盒子的部分。

但是不要忘记你总是需要一个盒子容器( Activity )或你的零件将被分散。所以一个盒子内有零件。

小心不要误用盒子。 Android UX 专家建议(你可以在 YouTube 上找到它们)我们应该明确加载另一个Activity ,而不是使用Fragment (就像我们处理具有类别的导航抽屉时)。一旦您对Fragments感到满意,您就可以观看他们的所有视频。更多它们是强制性材料。

您现在可以查看您的 UI 并确定您是否需要ActivityFragment ?你有新观点吗?我想你做到了。

我的理念是这样的:

只有在绝对绝对需要时才创建活动。由于后端堆栈可用于提交一堆片段事务,我尝试在我的应用程序中创建尽可能少的活动。此外,各种片段之间的通信比在活动之间来回发送数据容易得多。

活动过渡很昂贵,对吧?至少我是这么认为的 - 因为旧活动必须被销毁 / 暂停 / 停止,被推入堆栈,然后必须创建 / 启动 / 恢复新活动。

这是我的哲学,因为片段被引入。

好吧,根据谷歌的讲座(也许在这里 ,我不记得),你应该考虑尽可能使用片段,因为它使你的代码更容易维护和控制。

但是,我认为在某些情况下它会变得太复杂,因为托管片段的活动需要在它们之间导航 / 通信。

我想你应该自己决定什么对你最好。将活动转换为片段通常并不难,反之亦然。

我创建了一个关于这个 dillema 后在这里 ,如果你想进一步阅读一些。