android-fragments 一个活动和所有其他片段[已关闭]

x8diyxa7  于 2022-11-13  发布在  Android
关注(0)|答案(8)|浏览(212)

已关闭。此问题为opinion-based。当前不接受答案。
**想要改进此问题吗?**请更新问题,以便editing this post可以用事实与引用来回答.

9年前就关门了。
Improve this question
我正在考虑用Activity实现一个屏幕,用Fragmentsmanaging all the fragments thru the activity实现所有其他屏幕。

这是一个好主意吗?我的答案是但我仍然想更清楚地了解这个想法。
这个想法的优点和缺点是什么?
备注:

请不要给予我片段和活动的链接。

编辑:

下面是一些片段和活动:

优点:

1.片段应作为子活动与活动一起使用。
1.片段不能代替活动。
1.片段是为了可重用性(需要知道以什么方式可以实现可重用性)。
1.片段是编写同时支持平板电脑和手机的代码的最佳方式。

缺点:

1.我们需要实现接口来从片段中获取数据。
1.对于对话框,我们必须走很长的路来显示它。

如果我们不考虑平板电脑,为什么要使用片段?活动和片段之间的起始时间差是多少?

bcs8qyzn

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 格式
  • 编辑 2 -
    我 刚刚 读 了 一篇 关于 碎片 的 现代 ( 2017 ) 状态 的 伟大 文章 , 想起 了 这个 古老 的 答案 。 我 想 我 会 分享 :Fragments: The Solution to All of Android's Problems 格式
z6psavjg

z6psavjg2#

我即将完成一个项目(5个月的开发),有1个活动,17个片段,全屏幕。这是我的第二个基于片段的项目(之前是4个月)。

优点

  • 主要活动是700行代码,很好地管理了片段导航的顺序。
  • 每个片段都被很好地划分到它自己的类中,并且相对较小(大约几百行ui内容)。
  • 管理层可以说,“嘿,我们把这些屏幕的顺序换一下怎么样”,我可以很容易地做到,因为这些片段彼此不依赖,它们都通过活动进行交流。我不必深入研究各个活动,以找到它们彼此调用的位置。
  • 我的应用程序是非常图形化的,永远不会作为一个屏幕一个活动工作。所有这些子活动在内存中,将使应用程序运行的内存不足的所有时间,所以我将不得不finish()所有不可见的活动,并作出相同的控制逻辑导航,因为我会做的片段。可能还不如这样做的片段只是因为这一点。
  • 如果我们开发一个平板电脑应用程序,我们将更容易重构内容,因为所有内容都已经很好地分离了。
    缺点
  • 你必须学会如何使用片段
wqsoz72f

wqsoz72f3#

首先,无论你做什么,确保你有一个模块化的设计,使用模型,视图,演示者,不是高度依赖于一个活动或一个片段。
活动和片段真正提供了什么?
1.生命周期事件和回溯堆栈
1.背景和资源
因此,ONLY使用它们。它们有足够的责任,不要使它们过于复杂。我认为,即使在Activity或Fragment中集成TextView也是不好的做法。像public View findViewById(int id)这样的方法是PUBLIC是有原因的。
现在问题变得更简单了:我需要多个独立的生命周期事件和备份吗?如果你认为是的,也许,使用片段。如果你认为永远不会,不要使用片段。
最后,你可以制作自己的backstack和生命周期。但是,为什么要重新创建轮子呢?

zqdjd7g9

zqdjd7g94#

职业玩家
你可以通过一个Activity来控制你的片段,因为所有的片段都是相互独立的。(onPauseonCreateonStart ...)。通过具有生命周期,片段可以独立地响应事件,通过onSaveInstanceState保存它们的状态,并且被带回(即,诸如当在呼入之后恢复时或者当用户点击后退按钮时)。

缺点

1.在您的活动代码中创建复杂性。
1.您必须管理片段的顺序。
尽管如此,这是一个很好的主意,就像你需要创建一个应用程序,在那里你想显示多个视图。通过这个想法,你将能够在一个视图中查看多个片段。

o2gm4chl

o2gm4chl5#

这取决于你的应用的设计布局。假设你在设计布局中使用ActionBar中的Tab,那么在应用的Single Activity中,你可以在单击Tab时更改片段。所以现在你有了一个Activity,假设ActionBar中有三个Tab,片段提供了选项卡的视图,这使得它更容易管理,也是可行的。所以,这完全取决于您的应用程序的设计方案以及您如何决定为其进行构建。

vsikbqxv

vsikbqxv6#

优点:

  • 可用于通过xml布局创建可由多个屏幕大小和方向使用的单个界面。

缺点:

  • 在您的活动中需要更复杂的代码。

我相信这是个好主意,因为根据当前屏幕大小和方向使用不同的xml布局可以使应用程序更好用,如果你计划发布手机和平板电脑上的应用程序,也可以减少发布多个版本的需要。如果你的应用程序永远不会在平板电脑和手机上使用,那么可能就不值得这么麻烦了。

332nm8kg

332nm8kg7#

我支持将所有视图膨胀推迟到片段,以提供更好的灵活性。例如,为聚合多个片段的平板电脑提供一个单一的登陆活动,并在手机上重用相同的片段,以每个片段显示一个屏幕。然而,在手机实现中,我会为每个屏幕提供一个单独的活动。这些活动不会有太多的代码,因为它们会立即服从于它们的片段对应物来进行视图膨胀。
我认为这是一个坏主意,为手机实现必须改变到一个单一的登陆活动时,标签或滑出菜单被引入,因为标签或菜单导航只是在一个全新的屏幕结果。

t1qtbnec

t1qtbnec8#

我不使用单活动方法的最重要的原因是可以利用活动生命周期。活动包含应用程序某个部分的上下文行为,片段补充了该行为。能够利用活动生命周期中的可重写步骤有助于分离一个活动。这个生命周期还允许您返回到以前的上下文。使用单活动方法,一旦您离开了一个片段,您必须创建一个机制来返回到它。

相关问题