已关闭。此问题为opinion-based。当前不接受答案。
**想要改进此问题吗?**请更新问题,以便editing this post可以用事实与引用来回答.
9年前就关门了。
Improve this question
我正在考虑用Activity
实现一个屏幕,用Fragments
和managing all the fragments thru the activity
实现所有其他屏幕。
这是一个好主意吗?我的答案是否但我仍然想更清楚地了解这个想法。
这个想法的优点和缺点是什么?
备注:
请不要给予我片段和活动的链接。
编辑:
下面是一些片段和活动:
优点:
1.片段应作为子活动与活动一起使用。
1.片段不能代替活动。
1.片段是为了可重用性(需要知道以什么方式可以实现可重用性)。
1.片段是编写同时支持平板电脑和手机的代码的最佳方式。
缺点:
1.我们需要实现接口来从片段中获取数据。
1.对于对话框,我们必须走很长的路来显示它。
如果我们不考虑平板电脑,为什么要使用片段?活动和片段之间的起始时间差是多少?
8条答案
按热度按时间bcs8qyzn1#
这 取决 于 你 要 创建 的 应用 程序 。 我 已经 使用 这 两 种 方法 创建 了 几 个 应用 程序 , 不能 说 一 种 方法 总是 比 另 一 种 方法 更 好 。 我 创建 的 最 新 应用 程序 使用 了 单一 的
Activity
方法 和 Facebook 风格 的 导航 。 当 从 导航 列表 中 选择 项目 时 , 我 会 更新 单一 的Fragment
容器 以 显示 该 部分 。也 就是 说 , 使用 一 个
Activity
也 会 带来 很多 复杂 性 。 假设 您 有 一 个 编辑 表单 , 对于 用户 需要 选择 或 创建 的 某些 项 ,要求 他们 转到 一 个 新 的 屏幕 。 通过 活动 , 我们 '我 只 需要 用startActivityForResult
调用 新 屏幕 , 但是 用Fragments
就 没有 这样 的 东西 了 , 所以 你 最 后 把 值 存储 在Activity
上 , 并 进行 主 编辑 片段 检查Activity
, 以 查看 数据 是否 已 被 选择 并且 是否 应 向 用户 显示 。Aravind 所说 的 被 困 在 单一
Activity
类型 也 是 正确 的 , 但 并 不是 真 的 限制 。 你 的 Activity 将 是 一 个 FragmentActivity , 只要 你 不 需要MapView
, 那么 就 没有 真正 的 限制 。 如果 你 确实 想 显示 Map , 这 是 可以 做到 的 ,但 您 需要 修改 Android 兼容 性 库 以 使FragmentActivity
扩展MapActivity
, 或者 使用 公开 提供 的 android-support-v4-googlemaps 。最终 , 我 认识 的 大多 数 开发 人员 都 选择 了
Activity
这 条 路线 来 简化 他们 的 代码 。 在 平板 电脑 的 UI 方面 , 你 有时 会 因为 使用 一 个Activity
而 陷入 困境 , 只是 为了 实现 你 的 设计 师 们 提出 的 疯狂 交互 : )谷歌 终于 发布 了
MapFragment
到 兼容 性 库 , 所以 你 不再 需要 使用 android-support - v4 - googlemaps 黑客 . 在 这里 阅读 更新 :Google Maps Android API v2 格式我 刚刚 读 了 一篇 关于 碎片 的 现代 ( 2017 ) 状态 的 伟大 文章 , 想起 了 这个 古老 的 答案 。 我 想 我 会 分享 :Fragments: The Solution to All of Android's Problems 格式
z6psavjg2#
我即将完成一个项目(5个月的开发),有1个活动,17个片段,全屏幕。这是我的第二个基于片段的项目(之前是4个月)。
优点
finish()
所有不可见的活动,并作出相同的控制逻辑导航,因为我会做的片段。可能还不如这样做的片段只是因为这一点。缺点
wqsoz72f3#
首先,无论你做什么,确保你有一个模块化的设计,使用模型,视图,演示者,不是高度依赖于一个活动或一个片段。
活动和片段真正提供了什么?
1.生命周期事件和回溯堆栈
1.背景和资源
因此,ONLY使用它们。它们有足够的责任,不要使它们过于复杂。我认为,即使在Activity或Fragment中集成TextView也是不好的做法。像public View findViewById(int id)这样的方法是PUBLIC是有原因的。
现在问题变得更简单了:我需要多个独立的生命周期事件和备份吗?如果你认为是的,也许,使用片段。如果你认为永远不会,不要使用片段。
最后,你可以制作自己的backstack和生命周期。但是,为什么要重新创建轮子呢?
zqdjd7g94#
职业玩家
你可以通过一个Activity来控制你的片段,因为所有的片段都是相互独立的。(
onPause
,onCreate
,onStart
...)。通过具有生命周期,片段可以独立地响应事件,通过onSaveInstanceState
保存它们的状态,并且被带回(即,诸如当在呼入之后恢复时或者当用户点击后退按钮时)。缺点
1.在您的活动代码中创建复杂性。
1.您必须管理片段的顺序。
尽管如此,这是一个很好的主意,就像你需要创建一个应用程序,在那里你想显示多个视图。通过这个想法,你将能够在一个视图中查看多个片段。
o2gm4chl5#
这取决于你的应用的设计布局。假设你在设计布局中使用ActionBar中的Tab,那么在应用的Single Activity中,你可以在单击Tab时更改片段。所以现在你有了一个Activity,假设ActionBar中有三个Tab,片段提供了选项卡的视图,这使得它更容易管理,也是可行的。所以,这完全取决于您的应用程序的设计方案以及您如何决定为其进行构建。
vsikbqxv6#
优点:
缺点:
我相信这是个好主意,因为根据当前屏幕大小和方向使用不同的xml布局可以使应用程序更好用,如果你计划发布手机和平板电脑上的应用程序,也可以减少发布多个版本的需要。如果你的应用程序永远不会在平板电脑和手机上使用,那么可能就不值得这么麻烦了。
332nm8kg7#
我支持将所有视图膨胀推迟到片段,以提供更好的灵活性。例如,为聚合多个片段的平板电脑提供一个单一的登陆活动,并在手机上重用相同的片段,以每个片段显示一个屏幕。然而,在手机实现中,我会为每个屏幕提供一个单独的活动。这些活动不会有太多的代码,因为它们会立即服从于它们的片段对应物来进行视图膨胀。
我认为这是一个坏主意,为手机实现必须改变到一个单一的登陆活动时,标签或滑出菜单被引入,因为标签或菜单导航只是在一个全新的屏幕结果。
t1qtbnec8#
我不使用单活动方法的最重要的原因是可以利用活动生命周期。活动包含应用程序某个部分的上下文行为,片段补充了该行为。能够利用活动生命周期中的可重写步骤有助于分离一个活动。这个生命周期还允许您返回到以前的上下文。使用单活动方法,一旦您离开了一个片段,您必须创建一个机制来返回到它。