`
Everyday都不同
  • 浏览: 713393 次
  • 性别: 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导航就完成了。

分享到:
评论

相关推荐

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

    谈谈Android里的Context的使用

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

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

    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之泡泡效果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 ;...

    斑马Android_ScannerSDK_v2.1.4.0 及DEMO

    斑马android sdk,官网不太好下,部分代码 : public class ScannersActivity extends BaseActivity implements NavigationView.OnNavigationItemSelectedListener, ScannerAppEngine....

    java中extends与implements的区别.docx

    java中extends与implements的区别.docx

    Android组件ViewFlipper的使用

    使用ViewFlipper的手势功能完成的图像之间的切换、 package com.action; import android.app.Activity; import android.os.Bundle; import android.view.GestureDetector; import android.view.MotionEvent; import...

    访微信语音聊天

    import android.app.ActionBar; import android.app.Fragment; import android.graphics.drawable.AnimationDrawable; import android.media.MediaPlayer; import android.os.Bundle; import android.util.Log; ...

    xlistview代码

    public class XListView extends ListView implements OnScrollListener { private float mLastY = -1; // save event y /** * 用于下拉后,滑动返回 */ private Scroller mScroller; // used for scroll ...

    Android实验报告生命周期.doc

    Android 开发 (实验四) 实验题目:Activity生命周期验证试验 指导老师: 班 级:计算机...//创建意图对象 //使用意图对象打开一个新的Activity startActivity(intent); } } } AlcActivity.java package com.wr; imp

    Android代码-ScrollTextView

    Android 滚动字幕,如新闻联播下面的,可以使用在广告机,机顶盒,电视App等信息发布系统。 以前是在信息发布系统上使用过,作为动态布局的一部分,题外话,如果有想做像分众传媒或者 类似的电梯门口广告的可以参考...

    Javaextends与implements的区别.docx

    Javaextends与implements的区别.docx

    安卓控件的使用例子

    安卓控件的使用 package com.example.mybutton; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.widget.RadioButton; import android.widget.RadioGroup; ...

    Android2.0源代码

    该VideoView类可以加载各种来源的图像(如资源或内容提供商),需要计算它从视频测量,以便它可以在任何布局管理器使用,并提供诸如缩放和着色的各种显示选项。在其他的平台上面可能VideoPlayer开发是一个比较有挑战...

    android Camera自动拍照、自动对焦并获取指定大小图片

    1.首先android6.0以上版本要动态申请相机和文件读写权限 2.废话不啰嗦,上代码: /** * 摄像头画面采集界面 */ public class DistinguishActivity extends BaseActivity implements SurfaceHolder.Callback, ...

    Android簡易計算機

    package tw.android; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget....

    Android代码-Glide加载gif动图

    Android-stduio引入类库 在build.gradle中添加依赖: compile 'com.github.bumptech.glide:glide:3.7.0' 需要support-v4库的支持,如果你的项目没有support-v4库(项目默认已经添加了),还需要添加support-v4依赖: ...

Global site tag (gtag.js) - Google Analytics