Android 片段和活动

Posted

技术标签:

【中文标题】Android 片段和活动【英文标题】:Android Fragments and Activities 【发布时间】:2012-10-28 19:50:58 【问题描述】:

参考下图:

http://developer.android.com/guide/components/fragments.html

有人可以解释一下为什么 Google 建议在手机上使用 2 个单独的活动,在平板电脑上使用一个活动吗? 如果我在活动 A 中有代码来管理片段 B(用于平板电脑),我为什么要在活动 B 中为手机重复相同的代码?

似乎对于电话我仍然可以使用 1 个活动(仅活动 A)并替换片段,这可以减少冗余代码吗?

谢谢。

【问题讨论】:

【参考方案1】:

本质上,原因是手机很小。真的很小。事实上,很小。

以电子邮件应用程序的经典场景为例。该场景中的两个片段是消息列表(片段 A)和消息内容(片段 B)。在有空间的平板电脑上,您可以将它们组合成一个活动,同时在屏幕上舒适地显示。但是,在手机上,您需要仔细管理屏幕空间,因此您应该将它们分为选择消息阶段(活动 A 显示片段 A)和阅读消息阶段(活动 B 显示片段 B )。

通过将它们开发为片段,类似于其他平台中的用户控件,您可以在平板电脑和手机上的相同代码库中使用相同的片段,从现有片段组成活动。

【讨论】:

不是我问的。我了解片段和活动,但为什么我不应该使用带有 FragmentManager 的单个活动来交换手机上的片段,而是 Google 建议实施另一个活动 B? 哦,我明白了。你会用一些不必要的片段管理逻辑交换一些多余的活动逻辑,不是吗?我不知道哪个更好。从逻辑上讲,“选择和阅读”活动不同于“选择”和“阅读”活动,不是吗?您可以用活动中的片段切换替换活动之间的任何导航,但为什么要这样做?【参考方案2】:

我明白你的意思..

您可以使用片段容器并替换片段,为选择回调定义接口。谷歌就是这样做的,我猜对于那些来自活动世界的人来说可能更清楚。

【讨论】:

就是这个意思,但还有其他优势吗?使用单个活动和片段管理器在电话/单个布局上交换片段是否错误? 我相信它没有错。我不认为会有任何优势,除了你可以在一个更少的活动中完成它,事实上在一个更清洁的活动中完成它......取决于实际的逻辑实现。 这正是我的想法,它更干净,代码更少。谢谢。【参考方案3】:

Rejinderi 的解决方案应该有效。我认为无论是那个实现还是谷歌的例子都是一个合理的选择。这取决于您要达到的目标。

就个人而言,我更喜欢 Google 的示例,原因如下:

    单独的活动意味着您使用活动回栈。在某些(大多数?)情况下,片段返回堆栈很好,但默认转换不同。出于用户体验的原因,您可能更喜欢其中一种。 如果您想捕获一个意图,可能不清楚ActivityA 为何捕获JobB。 根据我的经验,在没有 FragmentA 的情况下处理 FragmentB 的逻辑(有点)不同,将其分解为自己的活动有助于分离该逻辑,并使所有内容更具可读性。 菜单选项也可能发生变化。我再次发现逻辑的分离更加清晰。

【讨论】:

以上是关于Android 片段和活动的主要内容,如果未能解决你的问题,请参考以下文章

在android活动中设置片段的形状和透明度

使后退按钮从活动返回到Android中的片段

Android开发——UI_片段

Android - 使用活动和片段导航 - 二进制 XML 文件错误

Android:使用 putExtra 从片段访问容器活动对象?

我应该用片段替换 Android 活动吗?