带有片段的两个面板 UI 与单独的活动

Posted

技术标签:

【中文标题】带有片段的两个面板 UI 与单独的活动【英文标题】:Two panel UI with Fragments vs Separate activities 【发布时间】:2011-07-16 18:18:18 【问题描述】:

我正在启动一个 Honeycomb 应用程序,该应用程序将具有基本的两个面板布局,左侧面板用于菜单,右侧面板用于每个部分的主要功能。

与 Fragments API 的可用示例相反,右侧面板上显示的内容包含每个菜单选项的完全不同的 UI。

根据选定的部分替换正确的片段是很诱人的,但这意味着在整个应用程序中只使用一个活动,这听起来不太好。此外,fragment 的生命周期与 Activity 相关联,因此在 Activity 被杀死之前不会杀死任何 Fragment,从而导致很多 Fragment “活着”。

但是,对于每个菜单选项有两个面板的不同 Activity 意味着用于菜单的片段必须添加到每个 Activity 中,并且会在应该有菜单的所有部分中出现不一致的布局。

这里有哪些最佳做法?

【问题讨论】:

【参考方案1】:

This 博文总结了选择片段而不是活动的原因:

通过 ActivityGroup 嵌入活动 是个好主意,但一直都是 自Activity以来难以处理 被设计成一个独立的 自包含组件而不是 与他人密切互动 活动。 Fragment API 是一个非常 更好的解决方案,并且应该 被视为替代品 嵌入式活动。

跨 Activity 保留数据 实例可以完成 通过 Activity.onRetainNonConfigurationInstance(), 但这是相当笨拙的 不明显。片段取代了它 通过允许您保留一个机制 整个 Fragment 实例只是由 设置标志。

Fragment 的一种特殊化称为 DialogFragment 可以很容易地显示 作为管理的一部分的对话框 活动生命周期。这取代 Activity 的“托管对话”API。

片段的另一种专业化 称为 ListFragment 可以很容易地 显示数据列表。这是相似的 到现有的 ListActivity(带有 更多功能),但应该减少 关于如何展示的常见问题 a> 列出一些其他数据。

所有片段的信息 当前附加到活动的是 由框架为您保存在 活动保存的实例状态和 重新启动时为您恢复。 这样可以大大减少 状态保存和恢复您需要的代码 自己写。

框架内置支持 管理 Fragment 的后台堆栈 对象,使其易于提供 活动内返回按钮行为 整合现有活动 回栈。这个状态也被保存了 并自动为您恢复。

片段是相当新的,所以除了那篇文章,我不确定你会找到很多最佳实践。我认为您需要做出的决定是我的交互紧密耦合并旨在共享数据,或者它们是没有太多交互的独立组件。


编辑,澄清:我认为为应用程序使用单个活动不一定是一个错误的决定。这确实是您应该根据应用程序的功能做出的决定。根据这篇文章,一个 Activity 是独立的,而一个片段通常只有在与 Activity 范围内的其他片段组合时才相关。你描述的情况,不同活动的组合是他们设计 Fragments 来解决的痛点之一。

【讨论】:

以上是关于带有片段的两个面板 UI 与单独的活动的主要内容,如果未能解决你的问题,请参考以下文章

带有片段的标题栏与列表视图重叠

深入浅出Flask(35): H-ui前端框架的面板滚动

Query UI DateRangePicker自定义面板个数

UI(UGUI)框架-------------UIManager单例模式与开发BasePanel面板基类/UIManage统一管理UI面板的实例化/开发字典扩展类

一个活动或单独活动中的多个片段

引导手风琴如何检查哪个面板处于活动状态