您的位置:首页 > 移动开发 > Android开发

Android 原生 Android ActionBar Tab (滑动)导航

2014-07-25 11:32 375 查看

本文内容

环境项目结构演示一:ActionBarTab导航演示二:ActionBarTab带滑动导航
本文演示Tab导航。第一个演示,是基本的Tab导航,第二个是带滑动的Tab导航。

另外,个人觉得,通过本例能够知道,如何创建初始化Fragment,并把Fragment放入“容器”中。容器既可以是LinearLayout、RelativeLayout,也可以是ViewGroup。这类似初始化Web应用程序页面的实现,困扰了我很久,不解决这个问题,无法自己写AndroidAPP。

Fragment碎片,这个思想很好。它是Android3.0新增的,有了Fragment,就可以将Activity模块化。这就好像,现在的页面都用div(层)的概念,我觉得,这大概借鉴了photoshop的layer(图层)的理念。

下载Demo

环境

Windows2008R264位EclipseADTV22.6.2,Android4.4.2(API19)SAMSUNGGT-8618,AndroidOS4.1.2

项目结构







图1项目结构图2主程序界面

如图1所示,唯一需要注意的是,DummiyFragment1和DummiyFragment2虽然内容完全相同,但它们继承的类不同。DummiyFragment1继承android.app.Fragment,而DummiyFragment2继承android.support.v4.Fragment。

演示ActionBarTab导航





图3Tab导航

核心代码如下所示:

publicclassActionBarTabNavTestextendsActivityimplements
ActionBar.TabListener{
privatestaticfinalStringSELECTED_ITEM="selected_item";
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tabnav);
finalActionBaractionBar=getActionBar();
//设置ActionBar的导航方式:Tab导航
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
//依次添加3个Tab页,并为3个Tab标签添加事件监听器
actionBar
.addTab(actionBar.newTab().setText("第一页").setTabListener(this));
actionBar
.addTab(actionBar.newTab().setText("第二页").setTabListener(this));
actionBar
.addTab(actionBar.newTab().setText("第三页").setTabListener(this));
}
@Override
publicvoidonRestoreInstanceState(BundlesavedInstanceState){
if(savedInstanceState.containsKey(SELECTED_ITEM)){
//选中前面保存的索引对应的Fragment页
getActionBar().setSelectedNavigationItem(
savedInstanceState.getInt(SELECTED_ITEM));
}
}
//将当前选中的Fragment页的索引保存到Bundle中
@Override
publicvoidonSaveInstanceState(BundleoutState){
outState.putInt(SELECTED_ITEM,getActionBar()
.getSelectedNavigationIndex());
}
@Override
publicvoidonTabUnselected(ActionBar.Tabtab,
FragmentTransactionfragmentTransaction){
}
//当指定Tab被选中时激发该方法
@Override
publicvoidonTabSelected(ActionBar.Tabtab,
FragmentTransactionfragmentTransaction){
//创建一个新的Fragment对象
Fragmentfragment=newDummyFragment1();
//创建一个Bundle对象,用于向Fragment传入参数
Bundleargs=newBundle();
args.putInt(DummyFragment2.ARG_SECTION_NUMBER,tab.getPosition()+1);
//向fragment传入参数
fragment.setArguments(args);
//获取FragmentTransaction对象
FragmentTransactionft=getFragmentManager().beginTransaction();
//使用fragment代替该Activity中的container组件
ft.replace(R.id.container,fragment);
//提交事务
ft.commit();
}
@Override
publicvoidonTabReselected(ActionBar.Tabtab,
FragmentTransactionfragmentTransaction){
}
}

.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}

演示ActionBarTab带滑动导航





图4Tab滑动导航

核心代码如下所示:

publicclassActionBarTabSwipeNavTestextendsFragmentActivityimplements
ActionBar.TabListener{
ViewPagerviewPager;
ActionBaractionBar;
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tabswipenav);
//获取ActionBar对象
actionBar=getActionBar();
//获取ViewPager
viewPager=(ViewPager)findViewById(R.id.pager);
//创建一个FragmentPagerAdapter对象,该对象负责为ViewPager提供多个Fragment
FragmentPagerAdapterpagerAdapter=newFragmentPagerAdapter(
getSupportFragmentManager()){
//获取第position位置的Fragment
@Override
publicFragmentgetItem(intposition){
Fragmentfragment=newDummyFragment2();
Bundleargs=newBundle();
args.putInt(DummyFragment2.ARG_SECTION_NUMBER,position+1);
fragment.setArguments(args);
returnfragment;
}
//该方法的返回值i表明该Adapter总共包括多少个Fragment
@Override
publicintgetCount(){
return3;
}
//该方法的返回值决定每个Fragment的标题
@Override
publicCharSequencegetPageTitle(intposition){
switch(position){
case0:
return"第一页";
case1:
return"第二页";
case2:
return"第三页";
}
returnnull;
}
};
//设置ActionBar使用Tab导航方式
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
//遍历pagerAdapter对象所包含的全部Fragment。
//每个Fragment对应创建一个Tab标签
for(inti=0;i<pagerAdapter.getCount();i++){
actionBar
.addTab(actionBar.newTab()
.setText(pagerAdapter.getPageTitle(i))
.setTabListener(this));
}
//为ViewPager组件设置FragmentPagerAdapter
viewPager.setAdapter(pagerAdapter);//①
//为ViewPager组件绑定事件监听器
viewPager
.setOnPageChangeListener(newViewPager.SimpleOnPageChangeListener(){
//当ViewPager显示的Fragment发生改变时激发该方法
@Override
publicvoidonPageSelected(intposition){
actionBar.setSelectedNavigationItem(position);
}
});
}
@Override
publicvoidonTabUnselected(ActionBar.Tabtab,
FragmentTransactionfragmentTransaction){
}
//当指定Tab被选中时激发该方法
@Override
publicvoidonTabSelected(ActionBar.Tabtab,
FragmentTransactionfragmentTransaction){
viewPager.setCurrentItem(tab.getPosition());//②
}
@Override
publicvoidonTabReselected(ActionBar.Tabtab,
FragmentTransactionfragmentTransaction){
}
}

.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}

下载Demo
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐
章节导航