为什么不总是在一项活动中使用片段[关闭]

2024-02-25

为什么有人会创建活动而不是一个包含许多片段的活动?我发现使用片段可以更轻松地共享数据,而且您可以更好地使用 onpause 来确定应用程序是否进入后台或片段是否正在切换。

我错过了什么吗?

Thanks


(提前为冗长的答案表示歉意)

我认为没有什么可以阻止你这样做。

话虽如此,我如何看待活动是一个可以定义当前过渡的整个 UI 屏幕应如何显示的地方:它应包含哪些片段以及这些片段应如何并排放置,更重要的是,应用程序流程有效。

我的活动中的片段应该一起构成一个有意义的屏幕,具有我期望的功能并且应该可重复使用,但它们不应该知道其他片段的存在。这就是活动的工作。事实上,我强烈遵守这样的规则:一个片段永远不应该知道另一个片段的存在(尽管现在您可以将片段包含在片段中,这有点违背了这一点)。如果我需要转换到一组完全不同的用例,我更喜欢使用活动来处理转换以及要使用的新布局和片段集。

我必须这样做吗?不。我可以在一个主要活动中完成这一切,并自己完成这些“准活动片段”之间的转换,但是当已经有一个框架可以为我完成这件事时,我为什么要这样做呢?使用意图来初始化活动(转换)比手动编写自己的引擎要简单得多,也更干净,该引擎可以跟踪所有片段的状态并决定启动哪些片段以及删除哪些片段。

同样,使用活动中的内置功能处理不同的方向和设备尺寸比您自己处理更容易,但同样,没有什么可以阻止您这样做。

在一个例子中更容易解释这一点:

想象一下这个用例:我需要编写一个显示歌曲和电影列表的应用程序。当我单击其中一首歌曲时,它应该打开一个媒体播放器并在单独的屏幕中播放,当我单击一部电影时,它应该打开一个视频播放器并播放视频。这里有明显的过渡:从主列表到音频播放器或视频播放器并返回。

仅使用一个活动和 3 个片段来执行此操作,我必须用适当的媒体播放器片段(视频/音频)替换列表片段,并在用户单击列表项时自行删除列表片段(以保留内存) 。这一切都很好而且很容易做到,但是如果我还必须添加一种向歌曲/电影添加评论的方法会发生什么?现在我必须修改我的主要(也是唯一)活动,以了解如果有人正在播放歌曲并单击评论按钮的行为,我需要再次转换到另一个片段并允许该片段捕获/显示评论。

正如您可能想象的那样,每次添加新功能时,我都必须修改我的主要活动来处理转换,因为片段并不意味着彼此了解并且意味着彼此独立。

如果我只有一个活动,我最终要做的就是创建一个 God 类(我的主要活动),其中定义了我的应用程序的整个流程。随着应用程序变得复杂,维护这个流程也会变得越来越复杂。同样,这是按照具有独立片段的原则进行的。如果你不关心你的片段彼此了解,那是完全不同的,但在我看来,你做错了:)

我将如何使用活动来做到这一点?我仍然会有 3 个碎片,但也会有3 个活动,其唯一作用是维持与其他活动之间的转换并定义应使用哪个片段。从列表活动到歌曲活动之间的转换是一个简单的意图,并且释放内存是为我完成的。现在,如果歌曲活动需要转换为评论活动,那么这只是歌曲活动到评论活动的另一个意图。我根本不必更改列表活动,事实上,列表活动永远不会知道此评论活动的存在。

我知道这是一个非常简单的示例,但随着您的应用程序变得越来越复杂,并且随着您添加越来越多的用例,您会发现拥有多个活动是有意义的。您不想自己维护片段之间的转换,否则您最终会得到一个非常复杂的框架,该框架将慢慢变得难以维护。

根据屏幕的方向和大小,相同的逻辑将适用于具有不同的片段/布局。同样,无论如何,您可以在唯一的活动中自己处理这些问题,但问题是:为什么?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么不总是在一项活动中使用片段[关闭] 的相关文章

  • Android 通知进度条冻结

    这是我正在使用的代码 http pastebin com 3bMCKURu http pastebin com 3bMCKURu 问题是 一段时间后 文件变得更重 通知栏下拉速度变慢 最后它就冻结了 你的通知太频繁了 这就是它冻结的原因 让
  • GCM 向主题发送消息:TOO_MANY_TOPICS 错误

    以前 GCM 每个应用程序有 100 万个主题订阅的限制 我发现他们现在已经取消了这一限制 基于发布 订阅模型 主题消息支持 每个应用程序无限订阅 https developers google com cloud messaging to
  • Android 应用程序在后台运行时保存数据

    目前我正在开发 xmmp 客户端 当应用程序位于前台时 该客户端工作得很好 但由于事实上 当应用程序处于后台时 我在 Application 类中保存了大量数据 复杂的 ArrayList 字符串和布尔值作为公共静态 每个字段都被垃圾收集
  • 如何更新 Firebase 中的节点密钥?

    如何重命名14 04 2017 node 没有用于重命名节点的 API 您必须获取节点的值 使用新名称将其保存到数据库并删除旧节点
  • Delphi XE7 Android 全屏(隐藏软键)

    如何在XE7中全屏显示 隐藏顶部 标题 和底部 软键 工具栏 在 XE6 中 我可以通过在应用程序部分写入来调整 AndroidManifest 以使我的应用程序全屏显示并且没有操作栏 android theme android style
  • 在 Google Analytics 中跟踪应用程序版本

    我正在使用谷歌分析模块 https marketplace appcelerator com apps 5081 2014113336 https marketplace appcelerator com apps 5081 2014113
  • TextView 之间有分隔线

    我正在尝试在 android studio 中创建以下布局 因为我对 android 东西还很陌生 所以我第一次尝试使用 LinearLayout 并认为这可能无法实现 现在我正在尝试使用RelativeLayout 我已经用颜色创建了这个
  • OnClick 事件中的 finish() 如何工作?

    我有一个Activity一键退出Activity 通过layout xml我必须设置OnClick事件至cmd exit调用 this finish 效果很好 public void cmd exit View editLayout thi
  • minHeight 有什么作用吗?

    在附图中 我希望按钮列与图像的高度相匹配 但我也希望按钮列有一个最小高度 它正确匹配图像的高度 但不遵守 minHeight 并且会使按钮向下滑动 我正在为按钮列设置这些属性
  • 在 Jetpack Compose 中启动动画矢量 Drawable

    我有一个动画矢量可绘制R drawable my anim 我想在 Jetpack Compose 中展示并开始 可绘制对象显示 渲染正确 但动画未启动 这是撰写视图 Composable fun SplashView Surface mo
  • Android 启动器快捷方式

    我制作了一个简单的打卡 打卡时钟应用程序 我想向用户添加在主屏幕上创建快捷方式的选项 该快捷方式将切换应用程序的状态 超时 超时 但我根本不希望此快捷方式在屏幕上打开应用程序 这是我的 setupShortcut private void
  • 从 android 简单上传到 S3

    我在网上搜索了从 android 上传简单文件到 s3 的方法 但找不到任何有效的方法 我认为这是因为缺乏具体步骤 1 https mobile awsblog com post Tx1V588RKX5XPQB TransferManage
  • 在 Android 上按下电源按钮时,如何防止先调用 onDestroy() 再调用 onCreate()

    我正在记录每个 onCreate 和 onDestroy 调用 我发现 一旦我单击 Android 上的电源按钮 以及模拟器上的电源按钮 我的活动中就会拨打电话 gt onDestroy gt onCreate 这会杀死我的游戏 然后立即从
  • 将 JSON 参数从 java 发布到 sinatra 服务

    我有一个 Android 应用程序发布到我的 sinatra 服务 早些时候 我无法读取 sinatra 服务上的参数 但是 在我将内容类型设置为 x www form urlencoded 之后 我能够看到参数 但不完全是我想要的 我在
  • Android:有没有办法以毫安为单位获取设备的电池容量?

    我想获取设备的电池容量来进行一些电池消耗计算 是否可以以某种方式获取它 例如 三星 Galaxy Note 2 的电池容量为 3100mAh 谢谢你的帮助 知道了 在 SDK 中无法直接找到任何内容 但可以使用反射来完成 这是工作代码 pu
  • 用于推送通知的设备令牌

    我正在实施推送通知服务 我需要创建一个数据库来存储 4 个移动平台的所有设备令牌 我想根据他们的平台 iOS Android BlackBerry WP7 来组织它们 但是有什么方法可以区分平台 这样如果我只想向 Android 用户发送消
  • 如何将图像从 Android 应用程序上传到网络服务器的特定文件夹中

    如何将图像从 android 移动到 Web 服务器上的指定文件夹 这是我的安卓代码 package com example bitmaptest import java io ByteArrayOutputStream import ja
  • 在 Android 中,如何将字符串从 Activity 传递到 Service?

    任何人都可以告诉如何将字符串或整数从活动传递到服务 我试图传递一个整数 setpossition 4 但它不需要 启动时总是需要 0 Service 我不知道为什么我不能通过使用 Service 实例从 Activity 进行操作 publ
  • 无法运行我的应用程序,要求选择 Android SDK

    今天我已经安装了Android Studio 金丝雀 1 现在我无法运行我的应用程序 将出现以下对话框 我已经通过 文件 gt 项目结构 gt Android SDK 位置 设置了正确的 SDK 位置 期待您的帮助来解决这个问题 警告对话框
  • 找到 Android 浏览器中使用的 webkit 版本?

    有没有办法知道某些特定手机上的 Android 浏览器使用的是哪个版本的 webkit 软件 如果有一个您可以浏览以获取该信息的 URL 那就太好了 但任何其他方式也很好 如果你知道 webkit 版本 你就知道 html5 支持多少 至少

随机推荐