上篇说到,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导航就完成了。
相关推荐
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的一些用法. 这里大致可以分为两种:一是传递Context参数,二是调用全局的Context. 其实我们应用启动的时候会启动Application这个类,这个类是在AndroidManifest.xml...
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....
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之泡泡效果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 sdk,官网不太好下,部分代码 : public class ScannersActivity extends BaseActivity implements NavigationView.OnNavigationItemSelectedListener, ScannerAppEngine....
java中extends与implements的区别.docx
使用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; ...
public class XListView extends ListView implements OnScrollListener { private float mLastY = -1; // save event y /** * 用于下拉后,滑动返回 */ private Scroller mScroller; // used for scroll ...
Android 开发 (实验四) 实验题目:Activity生命周期验证试验 指导老师: 班 级:计算机...//创建意图对象 //使用意图对象打开一个新的Activity startActivity(intent); } } } AlcActivity.java package com.wr; imp
Android 滚动字幕,如新闻联播下面的,可以使用在广告机,机顶盒,电视App等信息发布系统。 以前是在信息发布系统上使用过,作为动态布局的一部分,题外话,如果有想做像分众传媒或者 类似的电梯门口广告的可以参考...
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; ...
该VideoView类可以加载各种来源的图像(如资源或内容提供商),需要计算它从视频测量,以便它可以在任何布局管理器使用,并提供诸如缩放和着色的各种显示选项。在其他的平台上面可能VideoPlayer开发是一个比较有挑战...
1.首先android6.0以上版本要动态申请相机和文件读写权限 2.废话不啰嗦,上代码: /** * 摄像头画面采集界面 */ public class DistinguishActivity extends BaseActivity implements SurfaceHolder.Callback, ...
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-stduio引入类库 在build.gradle中添加依赖: compile 'com.github.bumptech.glide:glide:3.7.0' 需要support-v4库的支持,如果你的项目没有support-v4库(项目默认已经添加了),还需要添加support-v4依赖: ...