上篇说到,android现在的版本已经不再推荐使用继承TabActivity(或ActivityGroup)的方式创建Tabhost导航,所以现在尝试使用Fragment片段建立每一个导航标签。具体做法如下:
step1,建立一个总的Activity,获取actionBar并创建Tab选项卡
public class StationActivity extends FragmentActivity implements ActionBar.TabListener { private ActionBar actionBar; private String[] tabs = {"最近常用", "热点车站", "车站列表"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.station_select); actionBar = getActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); actionBar.setDisplayShowTitleEnabled(true); //在actionbar中添加EditText 控件 actionBar.setCustomView(R.layout.search); EditText search = (EditText) actionBar.getCustomView().findViewById(R.id.input); //创建Tab选项卡 for(int i=0; i<tabs.length; i++) { Tab tab = actionBar.newTab().setText(tabs[i]).setTabListener(this); actionBar.addTab(tab); } actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME); } }
step2,重写tab选项卡选中、不选中、再次选中的方法。每选中一个选项卡就启动相应的Fragment片段,对比上一篇创建tabhost的方式,每一个选项卡都是由一个intent来启动的;而本方式则是由如下方式启动。
@Override public void onTabSelected(Tab tab, FragmentTransaction ft) { switch(tab.getPosition()) { //为避免fragment之间切换出现重叠问题,这里把add方法改成replace方法 case 0: RecentStation recent = new RecentStation(); ft.replace(android.R.id.content, recent); break; case 1: HotStation hot = new HotStation(); ft.replace(android.R.id.content, hot); break; case 2: ListStation list = new ListStation(); ft.replace(android.R.id.content, list); break; } } @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) { } @Override public void onTabReselected(Tab tab, FragmentTransaction ft) { }
注:RecentStation ,HotStation ,ListStation 都是fragment片段。
step3,建立每个选项卡对应的fragment(这里以RecentStation 为例)
public class RecentStation extends Fragment { TextView tv1, tv2; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.station_recent, container, false); tv1 = (TextView) view.findViewById(R.id.tip1); tv2 = (TextView) view.findViewById(R.id.tip2); return view; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //更多代码。。。。。 } }
这里需要注意的地方:
1、使用此种fragment的方式创建Tabhost选项卡,可以重写的方法有onCreateView,onActivityCreated,onCreate。方法的执行顺序为:onCreate-->onCreateView-->onActivityCreated
2、如果想要在fragment对应的布局文件中使用ListView,最好继承自Fragment而不是ListFragment,因为如果继承后者,当listView填充完毕仍然会有一个圆形进度条显示,美观度大打折扣
3、一般而言,在onCreateView方法中加载布局文件,找到对应的组件;在onActivityCreated方法中填充数据等。
相应的布局文件省略……
至此,采用actionbar的方式创建tabhost导航就完成了。
相关推荐
在更早的版本或者对于不支持`ActionBar`的设备,可以通过`android.support.v7.app.ActionBar`(AppCompat库)来实现相同的功能。 实现`Fragment`和`ActionBar`的tab标签切换页面主要分为以下几个步骤: 1. **设置...
public class MainActivity extends AppCompatActivity implements ActionBar.TabListener { private ViewPager viewPager; private MyPagerAdapter adapter; @Override protected void onCreate(Bundle ...
在Android开发中,`ActionBar`是Google推荐的一种用于展示应用主要导航组件的设计模式。它位于应用程序界面的顶部,可以包含应用图标、应用标题以及一系列的`Tabs`。`ActionBarTabs`是`ActionBar`中用于切换不同内容...
在Android应用开发中,`ActionBar`是Android系统提供的一个用于展示应用主要操作和导航的组件。`ActionBar`通常位于屏幕顶部,它包含应用图标、应用标题...开发者可以根据项目需求,选择适合的导航方式来提升用户体验。
在Android开发中,高效地管理资源是至关重要的,特别是在内存有限的移动设备上。`android.support.v4.util.Pools`库提供了一种机制,帮助开发者有效地重用对象,从而节省内存并提高性能。这个库主要包含两种类型的池...
Android搜索框(SearchView)的功能和用法详解 Android搜索框(SearchView)是Android系统中的一种搜索组件,它允许用户在文本框中输入文字,并通过监听器取得用户的输入,当用户点击搜索时,监听器执行实际的搜索...
在Android应用开发中,随着AndroidX库的普及,越来越多的开发者选择将其项目迁移到这个新的支持库。...这种方式可以确保你的应用与其他AndroidX库兼容,同时也能享受到AndroidX带来的优化和新特性。
org.apache.struts2.ServletActionContext (implements org.apache.struts2.StrutsStatics) org.apache.struts2.RequestUtils org.apache.struts2.StrutsConstants java.lang.Throwable (implements java.io....
a Go library that implements E
大家好,今天给大家分享一下Android里的Context的一些用法. 这里大致可以分为两种:一是传递Context参数,二是调用全局的Context. 其实我们应用启动的时候会启动Application这个类,这个类是在AndroidManifest.xml...
本篇将详细讲解如何在Android应用中使用Glide加载SVG图像。 首先,我们需要了解SVG的基本概念。SVG是一种基于XML的图形语言,它可以描绘出各种形状、线条和路径,并且支持渐变、透明度和动画。由于SVG图像的特性,...
在Android开发中,SeekBar控件通常用于创建滑动条,它可以用来调整各种参数,如音量、亮度等。在本教程中,我们将探讨如何创建一个专门用于调节音量的SeekBar,即“Android音量seekbar制作”。 首先,我们需要在...
java.util.AbstractMap,V> (implements java.util.Map,V>) java.util.HashMap,V> (implements java.lang.Cloneable, java.util.Map,V>, java.io.Serializable) java.util.LinkedHashMap,V> (implements java.util....
在Android平台上,开发一款指南针程序是一项常见的任务,它能够帮助用户确定方向并导航。这份“Android指南针程序.rar”压缩包中包含了实现这一功能的相关资源和代码,适合那些想要学习或研究Android移动开发,特别...
public class DecodeActivity extends Activity implements SurfaceHolder.Callback { // private static final String strVideo = // Environment.getExternalStorageDirectory() + "/test/xx.avi"; // ...
android-calendar-view Easy to use, powerful, easy to expand the android calendar view library. 使用方便,易扩展的andorid 日历控件库 Features 日历左右滑动. 显示阳历,农历,节假日和二十四节气 实现对...
通过这种方式,我们可以创建一个功能丰富的Android Widget,允许用户在不打开应用程序的情况下浏览和交互数据。 注意,为了优化性能和用户体验,确保在ListView项的布局中尽量减少视图的数量和复杂性,避免过多的...
在Android应用开发中,获取设备的精确经纬度是一项常见的任务,这通常涉及到GPS(全球定位系统)和网络定位服务的使用。本压缩包文件“Android应用源码之android 获取精度纬度.zip”提供了相关的源码示例,供开发者...
Android之泡泡效果bubble package com.ray.bubble; import android.app.Activity; import android.content.Context; import android.graphics.drawable.AnimationDrawable; import android.os.Bundle; import ...
public class MainActivity extends Activity implements View.OnClickListener{ public static class ArgClass{ String action; //操作类型,add==添加产品 ,search==查询产品,del==删除产品 String name ;...