我知道Activities
旨在代表我的应用程序的单个屏幕,而Fragments
被设计为可重用的 UI 布局,其中嵌入了逻辑。
直到不久前,我开发了一个应用程序,因为它说应该开发它们。我创建了一个Activity
来表示我的应用程序的屏幕,并使用 Fragments for ViewPager
或Google Maps
。我很少创建一个可以多次重用的ListFragment
或其他 UI。
最近我偶然发现了一个只包含 2 个Activities
的项目,一个是SettingsActivity
,另一个是MainActivity
。 MainActivity
的布局中填充了许多隐藏的全屏 UI 片段,只显示了一个。在Acitivty
逻辑中,应用程序的不同屏幕之间有许多FragmentTransitions
。
我喜欢这种方法的原因是因为应用程序使用ActionBar
,它保持不变并且不随屏幕切换动画移动,这就是Activity
切换所发生的情况。这为这些屏幕转换提供了更流畅的感觉。
所以我想我要问的是分享你关于这个主题的当前开发方式,我知道它看起来可能看起来像一个基于意见的问题,但我把它视为一个 Android 设计和架构问题... 不是真的基于意见的一个。
更新(01.05.2014):继来自Square的Eric 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 并确定您是否需要Activity
或Fragment
?你有新观点吗?我想你做到了。
我的理念是这样的:
只有在绝对绝对需要时才创建活动。由于后端堆栈可用于提交一堆片段事务,我尝试在我的应用程序中创建尽可能少的活动。此外,各种片段之间的通信比在活动之间来回发送数据容易得多。
活动过渡很昂贵,对吧?至少我是这么认为的 - 因为旧活动必须被销毁 / 暂停 / 停止,被推入堆栈,然后必须创建 / 启动 / 恢复新活动。
这是我的哲学,因为片段被引入。