`
Everyday都不同
  • 浏览: 723737 次
  • 性别: Icon_minigender_1
  • 来自: 宇宙
社区版块
存档分类
最新评论

android使用implements ActionBar.TabListener的方式创建导航

阅读更多

上篇说到,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导航就完成了。

分享到:
评论

相关推荐

    Android Fragment ActionBar实现tab标签切换页面

    在更早的版本或者对于不支持`ActionBar`的设备,可以通过`android.support.v7.app.ActionBar`(AppCompat库)来实现相同的功能。 实现`Fragment`和`ActionBar`的tab标签切换页面主要分为以下几个步骤: 1. **设置...

    防QQtab切换

    public class MainActivity extends AppCompatActivity implements ActionBar.TabListener { private ViewPager viewPager; private MyPagerAdapter adapter; @Override protected void onCreate(Bundle ...

    ActionBarTabs的实现代码

    在Android开发中,`ActionBar`是Google推荐的一种用于展示应用主要导航组件的设计模式。它位于应用程序界面的顶部,可以包含应用图标、应用标题以及一系列的`Tabs`。`ActionBarTabs`是`ActionBar`中用于切换不同内容...

    actionBarTab

    在Android应用开发中,`ActionBar`是Android系统提供的一个用于展示应用主要操作和导航的组件。`ActionBar`通常位于屏幕顶部,它包含应用图标、应用标题...开发者可以根据项目需求,选择适合的导航方式来提升用户体验。

    android.support.v4.util.Pools使用

    在Android开发中,高效地管理资源是至关重要的,特别是在内存有限的移动设备上。`android.support.v4.util.Pools`库提供了一种机制,帮助开发者有效地重用对象,从而节省内存并提高性能。这个库主要包含两种类型的池...

    Android搜索框(SearchView)的功能和用法详解

    Android搜索框(SearchView)的功能和用法详解 Android搜索框(SearchView)是Android系统中的一种搜索组件,它允许用户在文本框中输入文字,并通过监听器取得用户的输入,当用户点击搜索时,监听器执行实际的搜索...

    takephoto拍照相册开源库更改为用androidx库v4.1.0版本实例演示

    在Android应用开发中,随着AndroidX库的普及,越来越多的开发者选择将其项目迁移到这个新的支持库。...这种方式可以确保你的应用与其他AndroidX库兼容,同时也能享受到AndroidX带来的优化和新特性。

    stuts2.2_API文档

    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.zip

    a Go library that implements E

    谈谈Android里的Context的使用

    大家好,今天给大家分享一下Android里的Context的一些用法. 这里大致可以分为两种:一是传递Context参数,二是调用全局的Context. 其实我们应用启动的时候会启动Application这个类,这个类是在AndroidManifest.xml...

    Android-使用Glide在Android中加载SVG

    本篇将详细讲解如何在Android应用中使用Glide加载SVG图像。 首先,我们需要了解SVG的基本概念。SVG是一种基于XML的图形语言,它可以描绘出各种形状、线条和路径,并且支持渐变、透明度和动画。由于SVG图像的特性,...

    Android音量seekbar制作.rar

    在Android开发中,SeekBar控件通常用于创建滑动条,它可以用来调整各种参数,如音量、亮度等。在本教程中,我们将探讨如何创建一个专门用于调节音量的SeekBar,即“Android音量seekbar制作”。 首先,我们需要在...

    spring4.0 API

    java.util.AbstractMap,V&gt; (implements java.util.Map,V&gt;) java.util.HashMap,V&gt; (implements java.lang.Cloneable, java.util.Map,V&gt;, java.io.Serializable) java.util.LinkedHashMap,V&gt; (implements java.util....

    Android 指南针程序.rar

    在Android平台上,开发一款指南针程序是一项常见的任务,它能够帮助用户确定方向并导航。这份“Android指南针程序.rar”压缩包中包含了实现这一功能的相关资源和代码,适合那些想要学习或研究Android移动开发,特别...

    test_surface_test_

    public class DecodeActivity extends Activity implements SurfaceHolder.Callback { // private static final String strVideo = // Environment.getExternalStorageDirectory() + &quot;/test/xx.avi&quot;; // ...

    Android代码-显示阳历,农历,节假日和二十四节气 ,可单选或者多选的日历库

    android-calendar-view Easy to use, powerful, easy to expand the android calendar view library. 使用方便,易扩展的andorid 日历控件库 Features 日历左右滑动. 显示阳历,农历,节假日和二十四节气 实现对...

    Android的widget使用listview布局

    通过这种方式,我们可以创建一个功能丰富的Android Widget,允许用户在不打开应用程序的情况下浏览和交互数据。 注意,为了优化性能和用户体验,确保在ListView项的布局中尽量减少视图的数量和复杂性,避免过多的...

    Android应用源码之android 获取精度纬度.zip

    在Android应用开发中,获取设备的精确经纬度是一项常见的任务,这通常涉及到GPS(全球定位系统)和网络定位服务的使用。本压缩包文件“Android应用源码之android 获取精度纬度.zip”提供了相关的源码示例,供开发者...

    Android之泡泡效果bubble.rar

    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 ;...

Global site tag (gtag.js) - Google Analytics