0

我正在为手机和平板电脑编写应用程序。像联系人应用程序一样,有多个选项卡(在我的例子中是 2 个)。对于手机 UI,它们由 ViewPager 管理,每个选项卡都有一个片段。

但是对于平板 UI,每个选项卡都是一个活动,而不是一个片段。它们必须是,因为您不能将片段放入片段中。(对?)

我意识到我可以只调用setContentView()选项卡侦听器,但是每次更改活动时不会破坏活动吗?我对很多事情感到困惑。

在不破坏手机用户界面的情况下,最好的方法是什么?

4

1 回答 1

1

设计良好的选项卡式 UI 从不将活动用于选项卡内容。

您是正确的,因为您不能在当前实现中嵌套片段,但这并不意味着您唯一的选择是活动。选项卡应始终充当视图开关;选项卡切换永远不会创建导航历史记录,并且选项卡导航应该始终发生在同一个活动中。

请记住,从 MVC 的角度来看,活动和片段只是控制器。它们的存在是为了响应生命周期事件并管理应用程序的元素以响应这些事件,包括 UI 中的视图。UI 的内容完全由当前窗口的视图层次结构决定,您可以以任何对您的应用有意义的方式操作视图层次结构。(虽然最好仍然遵循设计指南!)

由于 Fragment 具有用于管理视图子层次结构的内置机制,因此它们通常是分解 UI 的自然选择,但它们不是唯一的方法。ViewPager PagerAdapters 可以通过从资源系统中膨胀视图子层次结构来操作视图子层次结构,以 ListView 的方式回收视图,或者您可以提出的任何其他机制,如果不需要它们提供的生命周期事件,则根本不使用 Fragments。不同的布局资源可以根据屏幕大小使用针对不同资源限定符的不同布局变体来包含或排除某些元素。

简而言之,不要认为 Fragments 是实现多窗格 UI 的唯一方法,或者是实现 ViewPager 的每个页面的唯一方法。它们是两者的强大选项,但根据您的 Activity 的信息架构,您可能会发现自己使用它们的方式与其他应用程序不同,这没关系。

总体而言,如果您在分解 Activity 的 UI 时无法确定逻辑切点在哪里,那么您可能正在为您的应用程序构建一个整体 UI,该 UI 使用起来将与实现起来一样尴尬。让 UI 设计指导您的实现。如果每个选项卡都自然地切换出 Activity 窗口的全部内容,那么每个选项卡都可能非常适合片段。也许平板模式下的那些 Fragment 扩展了它们的功能,并使用不同的布局资源在各自的布局中呈现了多个窗格。

于 2012-09-02T04:39:46.903 回答