本章的示例程序通过Android UI系统,支持Activity、Fragment、Action Bar和多布局(multiple layout)能够一起工作,实现可以为很多应用服务的经典的应用骨架(app skeleton)。
让Android系统选择布局是支持该设计模式的重要方面。其他方面是少量的工具类代码,Fragment类和Activity类使用该工具类来管理Action Bar的选项卡。
Action Bar
在Android中,Action Bar和Fragment类一起支持创建可扩展的用户界面设计。Action Bar是为了提供菜单、文本入口项的容器,用户界面主要方面相关的其他“chrome”,以及支持在很多不同屏幕尺寸上显示该用户界面的一种简单方式。我们需要组织代码段,使得当使用某些选项卡选择Fragment时,这些选项卡只出现在Action Bar中。
选项卡(Tab)和Fragment
在本节中,我们将综合描述为列表和选项卡所用的Fragment,这些Fragment所包含的UI代码段,以及在Fragment之间导航的Action Bar的选项卡。对于这个框架性的示例,我们创建了很多工具方法,这些工具方法有助于Activity和Fragment子类实现Fragment和选项卡之间的交互。这些工具方法是静态方法,因此把它们组织成工具类,如下面的程序清单所示:
① Fragment类在Action Bar的选项卡中是可选的,它还实现了SetData接口。SetData接口的定义中提供了一个工具方法,它通过两种方式对接口进行抽象封装,一是一个活动持有所有片段,二是需要启动新的活动来显示片段。
② Initialize方法判断是否存在和选项卡相关的片段要初始化。在代码的前面部分,在Action Bar中可选的Fragment子类包含处理选项卡交互的代码。Initialize方法把选项卡和片段关联起来,真正调用的是接口。但是,在初始化之前,该方法判断是否存在要初始化的片段,另一个实例显示了是否通过片段调整布局。
③ 在我们给出的所有实例中,LoadTabFragments方法是最接近“做出判断”:如果没有片段来加载数据,该代码段会启动一个活动,显示这些片段。此外,如果我们需要启动该活动,我们通过传递给startActivity的Intent参数的extras变量把数据传递给该活动。