困境:何时使用碎片与活动:
我知道Activities
被设计成代表我的应用程序的单个屏幕,而Fragments
被设计成可重用的UI布局,其中嵌入了逻辑。
直到不久之前,我开发了一个应用程序,因为它表示应该开发它们。 我创建了一个Activity
来表示我的应用程序的一个屏幕,并使用Fragments作为ViewPager
或Google Maps
。 我很少创建可重复使用多次的ListFragment
或其他UI。
最近我偶然发现了一个只包含2个Activities
的项目,其中一个是SettingsActivity
,另一个是MainActivity
。 MainActivity
的布局填充了许多隐藏的全屏UI片段,只显示一个。 在Acitivty
逻辑中,应用程序的不同屏幕之间有许多FragmentTransitions
。
我喜欢这种方法是因为应用程序使用了一个ActionBar
,它保持不动,不会随着屏幕切换动画而移动,这是Activity
切换时发生的情况。 这给了这些屏幕转换更流畅的感觉。
所以我想我要问的是分享你关于这个话题的当前发展方式,我知道它可能看起来像一个基于意见的问题,但我把它看作是一个Android设计和体系结构问题......并不是真的意见为主。
UPDATE(01.05.2014):在Square的Eric Burke演讲之后(我不得不说这是一个很棒的演示文稿,其中有很多针对android开发者的有用工具,而且我与Square没有任何关系)
http://www.infoq.com/presentations/Android-Design/
根据我过去几个月的个人经验,我发现构建我的应用程序的最佳方式是创建代表应用程序中流的片段组,并将所有这些片段呈现在一个Activity
。 所以基本上,您的应用程序中的Activities
数量与流量数量相同。 这样,操作栏在所有流程的屏幕上保持完好无损,但正在通过改变流程来重新创建,这很有意义。 正如埃里克伯克所说的那样,我也逐渐认识到,尽可能少使用Activities
的理念并不适用于所有情况,因为它在他所谓的“上帝”活动中造成了混乱。
专家会告诉你:“当我看到用户界面时,我会知道是使用Activity
还是Fragment
”。 一开始这没有任何意义,但是最终你Fragment
是否需要Fragment
。
有一个很好的做法,我发现对我很有帮助。 当我试图向女儿解释一些事情时,我想到了这一点。
即想象一个代表屏幕的盒子。 你可以在这个盒子里加载另一个屏幕吗? 如果你使用一个新盒子,你是否需要复制第一盒子中的多个项目? 如果答案是肯定的,那么你应该使用Fragments
,因为根Activity
可以容纳所有重复的元素,以节省你创建它们的时间,并且你可以简单地替换部分方块。
但不要忘记 ,你总是需要一个盒子容器( Activity
),否则你的零件将被分散。 所以一个箱子里面有零件。
注意不要误用盒子。 Android UX专家建议(我们可以在YouTube上找到它们),我们应该明确加载另一个Activity
,而不是使用Fragment
(就像我们处理具有类别的导航抽屉时一样)。 一旦你对Fragments
感到满意,你可以观看他们的所有视频。 甚至更多,他们是强制性材料。
你现在可以看看你的用户界面,并找出你是否需要一个Activity
或Fragment
? 你有没有获得新的视角? 我认为你做到了。
我的理念是:
仅在绝对需要时创建活动。 随着backstack可用于提交大量片段事务,我尝试尽可能在应用程序中创建尽可能少的Activities。 而且,各种片段之间的通信要容易得多,而不是在活动之间来回发送数据。
活动转换很昂贵,对吧? 至少我相信 - 既然旧的活动被摧毁/暂停/停止,推到堆栈上,然后新的活动必须被创建/开始/恢复。
这是我的哲学,因为片段被引入。
那么,根据谷歌的讲座(也许在这里 ,我不记得),你应该考虑在可能的时候使用Fragments,因为它使你的代码更易于维护和控制。
但是,我认为在某些情况下,它可能会变得太复杂,因为承载片段的活动需要在它们之间导航/通信。
我想你应该自己决定什么对你最好。 将活动转换为片段通常并不难,反之亦然。
如果你想进一步阅读,我已经在这里创建了关于这个dillema的帖子。
链接地址: http://www.djcxy.com/p/83049.html