本节书摘来自异步社区《android平板电脑开发秘籍》一书中的第3章,第3.8节技巧:创建一个tab页式的actionbar,作者 【印度】b.m. harwani,更多章节内容可以访问云栖社区“异步社区”公众号查看
3.8 技巧:创建一个tab页式的actionbar
android平板电脑开发秘籍
tab页式的actionbar类似于自定义事件处理方法的按钮,它被设计成与fragment manager一起使用。为了在actionbar中显示导航tab页,请调用setnavigationmode()方法,把值actionbar.navigation_mode_tabs作为参数传入,如下所示:
指定了导航模式后,通过调用actionbar 的addtab()方法可以添加tab页,如下所示:
以上代码新建了一个tab页,把它的标题设为“create”,给它绑定了一个tablistener,最后把新建的tab页添加到actionbar中去。例如,这里用settext()方法设置了tab页的标题。可以调用seticon()方法来为tab页定义一个图标。你还可以调用setcontentdescription()方法设置tab页的更多细节信息。
示例:
这段代码给actionbar添加了一个tab页面,标题为“create”。与此tab页关联的图标是默认图标ic_launcher,详细的描述信息是“creating the invoice”。当点击tab页时,事件由tablistener进行处理,完成所需的任务。
现在将通过一个实际的例子来了解tab页式actionbar的概念。请创建一个名为的actionbartabapp android项目。在这个应用程序中,将新建两个tab页:create和update。当选中一个tab页时,对应的fragment将会被激活,并显示一段文字信息表示该fragment被激活了。两个fragment的view将会通过单独的xml layout文件显示。因此请在res/layout文件夹下分别添加两个名为createfragment.xml和updatefragment.xml的xml文件。
请在createfragment.xml中写入代码清单3-11给出的代码。
代码清单3-11 写入createfragment.xml文件的代码
可以看到,上述layout文件定义了一个textview,初始时显示文字“this is create fragment”。显示此信息即表示第一个fragment被激活了。类似地,在updatefragment.xml文件中写入代码清单3-12给出的代码。
代码清单3-12 写入updatefragment.xml文件的代码
同样,在layout文件中为第二个fragemt定义了一个textview控件。此textview初始时显示文字“this is update fragment”,表示第二个fragemt被激活了。
为了在选中action tab页时能够显示相应fragemt的内容,需要在activity layout文件中定义一个fragemt容器。因此,在activity layout文件activity_action_bar_tab_app.xml中写入代码清单3-13所示的代码。
代码清单3-13 写入activity layout文件activity_action_bar_tab_app.xml的代码
为了载入两个fragment的view,请在android项目的包com.androidtablet.action bartabapp中添加两个java类文件:createactivity.java和updateactivity.java。
为了从layout文件createfragment.xml中载入view,请把代码清单3-14给出的代码写入createactivity.java文件。
代码清单3-14 写入createactivity.java文件的代码
同样,为了从layout文件updatefragment.xml载入view,请把代码清单3-15给出的代码写入updateactivity.java文件。
代码清单3-15 写入updateactivity.java文件的代码
接下来,需要在主activity文件actionbartabappactivity.java中写入一些java代码,以完成以下任务。
在应用程序中定义两个tab页:create和update。
定义tab页侦听器并与两个tab页关联。
当相应的tab页被点击时,激活fragment create和update。
为了完成上述所有任务,把代码清单3-16所给出的代码写入java activity文件actionbartab appactivity.java中。
代码清单3-16 写入java activity文件actionbartabappactivity.java的代码
可以看到,调用getactionbar()方法创建了actionbar对象。为了让actionbar以 tab页的方式显示,把它的导航模式设成了actionbar.navigation_mode_tabs。可以在setdisplayshowtitleenabled()方法传入布尔值false,来隐藏activity的标题。然后,创建两个标签为create和update的tab页,并添加到actionbar中。
事件侦听器tablistener与两个tab页都关联。不管选中哪一个tab页,ontabselected()方法都会被调用,并打开预设的fragment。ontabselected()方法激活相应的fragment,把定义于layout文件的view显示出来。当tab页被选中时,ontabunselected ()方法也会被调用,那些没有被选中的tab页将作为参数传入。与未选中tab页关联的fragment将会从堆栈中移除,这些fragment变为不可见。
ontabunselected ()方法将显示未选中tab页的位置1。运行此应用程序后,你将看到tab页式actionbar显示了两个tab页:create和update。当你选择create页后,与之相关联的fragment将会被激活,显示出一条信息“this is create fragment”,如图3-8上所示。类似地,在选择update页后,与之关联的fragment将会被激活,显示出文字信息“this is update fragment”,如图3-8下所示。