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 - 使用活动和片段导航 - 二进制 XML 文件错误