Fragments如何影响Activity“用户可以做的单一、专注的事情”原则?
Posted
技术标签:
【中文标题】Fragments如何影响Activity“用户可以做的单一、专注的事情”原则?【英文标题】:How Fragments affect the Activity "single, focused thing that the user can do" principle? 【发布时间】:2011-08-08 18:05:59 【问题描述】:正如 android 文档所述:“活动是用户可以做的一个单一的、专注的事情。”
但是,使用 Fragments,我们将能够在与 Reto Meier suggest 相同的 Activity 中做许多“事情”。他的建议是用同一 Activity 中的内容片段替换选择片段(“在我们的代码中,这会产生两难”一节)。
假设我的应用程序“有点”复杂,有很多活动,有一个复杂的导航树,并且在设计时考虑了“用户可以做的单一、专注的事情”原则。
现在让我说我必须让它适应片段和大屏幕......而且我不想创建第二个应用程序,在一个应用程序中也没有两个完全不同的逻辑(一个用于手机,另一个用于表格)。
我应该有一个 Activity 来管理所有应用程序片段和片段事务吗?就像上面的 Retro Meier 建议一样。这是推荐的路径吗?从而打破了活动的“用户可以做的单一、专注的事情”原则?
或者我错过了什么?我希望;)
顺便说一句,我认为 Fragments 看起来很棒,但从我目前所见,只有当您从头开始创建应用程序时。因为让应用程序与手机和平板电脑兼容看起来有点乏味。希望是错的:)
Dianne Hackborn already has answered(感谢链接 mgv):
您可以将整个应用程序放在一个 Activity 中,在该 Activity 中您可以随着片段状态的变化而更改片段结构
因此,Activity 成为一种容器,您可以在其中插入 Fragment。我喜欢这种方法,但是......在我的应用程序中,有大约 30 种不同的操作可用,每个操作都需要执行大约 2 到 4 个屏幕步骤(表单和选择列表),它们都不同,并且还有导航限制。它适用于每个活动处理一个屏幕/步骤行为。
因此,为了移植到 Fragments,我应该将每个屏幕逻辑移动到 Fragments,并将活动用作每个操作的容器。因此,让活动作为管理每个操作的片段之间导航的活动,对吗?看起来适应长时间的应用程序会很痛苦。 :(
当前的 Activity 定义应该会有所改变。 :)
【问题讨论】:
***.com/questions/5328606/…的可能重复 【参考方案1】:我应该有一个 Activity 来管理所有应用程序片段和片段事务吗?
这是不可能在摘要中回答的。但是,即使在基于片段的世界中,大多数应用程序也会有多个活动。其中一些是为了适应较小的屏幕尺寸,每个活动往往是一个片段。其中一些是框架需要的(例如,继承自 PreferenceActivity
)。而且,其中一些将通过 GUI 设计。
因此打破了活动的“用户可以做的单一、专注的事情”原则?
这部分文档是在 2008 年编写的,可能更早。如果片段当时存在,我想文档会说明片段是“用户可以做的单一、集中的事情”,活动充当编排层,确定哪些片段在什么情况下可见。
文档不会在所有地方都更新以反映片段,即使更新,也需要一些时间。对于 2011 年的剩余时间,您至少需要执行自己的 2008 年指令翻译,以将它们转换为 2011 年基于片段的 UI。
现在让我说我必须让它适应片段和大屏幕......而且我不想创建第二个应用程序,在一个应用程序中也没有两个完全不同的逻辑(一个用于手机,另一个用于表格)。
我不知道您认为“完全不同的逻辑”是什么。在基于片段的应用程序中,您的大部分业务逻辑将在片段本身中。活动再次充当编排层,确定哪些片段应该可见并协调事件处理。后者会比以前复杂一些,因为有时单击列表中的项目会弹出一个新片段,有时单击列表中的项目会启动新活动,具体取决于屏幕大小。
还是我错过了什么?
说实话,您的问题缺少足够的具体性,无法合理回答。
【讨论】:
“您的问题缺少足够的具体性,无法合理回答” :) 您已经完美地回答了整个问题:“我想文档会说明 FRAGMENT 是“单一的,用户可以做的专注的事情”,活动充当协调层,确定哪些片段在什么情况下可见方面......考虑到我们正在谈论像活动这样的关键元素。谢谢!以上是关于Fragments如何影响Activity“用户可以做的单一、专注的事情”原则?的主要内容,如果未能解决你的问题,请参考以下文章
响应Activity中的ViewPager2 Fragments事件
将对象从 Activity 传递到 Fragments 是通过引用传递
从 Host Activity 向 Fragments 发送位置更新
Activity 保存的 android:support:fragments 越来越大,导致 TransactionTooLargeException