码迷,mamicode.com
首页 > 其他好文 > 详细

使用ActionBar实现Tab导航

时间:2015-01-04 06:25:01      阅读:6464      评论:0      收藏:0      [点我收藏+]

标签:

为了使用ActionBar实现Tab导航,按如下步骤进行即可。

1.调用ActionBar的setNavigationMode(ActionBar.NAVIGATION_MODE_TABS)方法设置使用Tab导航方式。

2.调用ActionBar的addTab方法添加多个Tab标签,并为每个Tab标签添加事件监听。

Fragment相当于activity片段,通常使用单独的activity组合多个fragment,这样既可以在一个activity创建多个用户界面,又可以让多个activity复用同一个fragment,总之,fragment相当于activity的模块化区域。

fragment有自己的生命周期,可以接受处理属于它自身的事件,并允许activity运行期间动态的添加删除fragment。

fragment允许定义自己的布局,也可以通过生命周期回调方法定义自己的行为,这一点非常像activity。

实例的布局文件:

StandardWidget\res\layout\tabnavigation.xml

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical" 
 6     android:id="@+id/container"
 7     
 8     >
 9     
10 
11 </LinearLayout>

activity代码:

  1 package com.example.standardwidget;
  2 
  3 
  4 import android.os.Bundle;
  5 import android.support.v4.app.Fragment;
  6 import android.support.v4.app.FragmentTransaction;
  7 import android.support.v7.app.ActionBar;
  8 import android.support.v7.app.ActionBar.TabListener;
  9 import android.support.v7.app.ActionBarActivity;
 10 import android.support.v7.app.ActionBar.Tab;
 11 import android.view.Menu;
 12 import android.view.MenuInflater;
 13 import android.view.MenuItem;
 14 import android.widget.Toast;
 15 
 16 public class MyActionBarActivity extends ActionBarActivity implements
 17         TabListener {
 18 
 19     private static final String SELECTED_ITEM = "selected_item";
 20 
 21     @Override
 22     protected void onCreate(Bundle savedInstanceState) {
 23         // TODO Auto-generated method stub
 24 
 25         super.onCreate(savedInstanceState);
 26         getSupportActionBar().setDisplayHomeAsUpEnabled(true);
 27         setContentView(R.layout.tabnavigation);
 28         // 设置是否显示app的图标
 29         getSupportActionBar().setDisplayShowHomeEnabled(true);
 30         // 设置是否将app图标转变成成可点击的按钮
 31         getSupportActionBar().setHomeButtonEnabled(true);
 32 
 33         getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
 34         getSupportActionBar().addTab(
 35                 getSupportActionBar().newTab().setText("第一页")
 36                         .setTabListener(this));
 37 
 38         getSupportActionBar().addTab(
 39                 getSupportActionBar().newTab().setText("第二页")
 40                         .setTabListener(this));
 41 
 42         getSupportActionBar().addTab(
 43                 getSupportActionBar().newTab().setIcon(R.drawable.p13)
 44                         .setText("第三页").setTabListener(this));
 45         
 46         
 47     }
 48 
 49     @Override
 50     protected void onRestoreInstanceState(Bundle savedInstanceState) {
 51         // TODO Auto-generated method stub
 52         super.onRestoreInstanceState(savedInstanceState);
 53         
 54         if (savedInstanceState.containsKey(SELECTED_ITEM)) {
 55         //选中前面保存的索引对应的fragment页
 56             getSupportActionBar().setSelectedNavigationItem(
 57                     savedInstanceState.getInt(SELECTED_ITEM));
 58         }
 59 
 60     }
 61 
 62     @Override
 63     protected void onSaveInstanceState(Bundle outState) {
 64         // TODO Auto-generated method stub
 65         super.onSaveInstanceState(outState);
 66         //将当前选中的fragment页的索引保存到bundle中
 67         outState.putInt(SELECTED_ITEM, getSupportActionBar()
 68                 .getSelectedNavigationIndex());
 69     }
 70 
 71     @Override
 72     public boolean onCreateOptionsMenu(Menu menu) {
 73         // TODO Auto-generated method stub
 74         // 为ActionBar扩展菜单项
 75         MenuInflater inflater = getMenuInflater();
 76         inflater.inflate(R.menu.main_activity_actions, menu);
 77         return super.onCreateOptionsMenu(menu);
 78 
 79     }
 80 
 81     @Override
 82     public boolean onOptionsItemSelected(MenuItem item) {
 83         // TODO Auto-generated method stub
 84         // 处理动作按钮的点击事件
 85         switch (item.getItemId()) {
 86         case R.id.action_search:
 87             Toast.makeText(this, "openSearch", 2000).show();
 88             return true;
 89         case R.id.action_settings:
 90 
 91             Toast.makeText(this, "openSettings", 2000).show();
 92             return true;
 93 
 94         case android.R.id.home:
 95             Toast.makeText(this, "App Icon", 2000).show();
 96             return true;
 97         default:
 98             return super.onOptionsItemSelected(item);
 99         }
100     }
101 
102     @Override
103     public void onTabReselected(Tab arg0, FragmentTransaction arg1) {
104         // TODO Auto-generated method stub
105 
106     }
107 
108     @Override
109     public void onTabSelected(Tab arg0, FragmentTransaction arg1) {
110         // TODO Auto-generated method stub
111         Fragment fragment = new DummyFragment();
112         //用于向fragment传入参数
113         Bundle argsBundle = new Bundle();
114         argsBundle.putInt(DummyFragment.ARG_SELECTION_NUMBER, arg0.getPosition()+1);
115         //向fragment传入参数
116         fragment.setArguments(argsBundle);
117         //获取fragmenttransaction对象
118         FragmentTransaction fTransaction = getSupportFragmentManager().beginTransaction();
119         //使用fragment代替该activity中的container组件
120         fTransaction.replace(R.id.container, fragment);
121         fTransaction.commit();
122     }
123 
124     @Override
125     public void onTabUnselected(Tab arg0, FragmentTransaction arg1) {
126         // TODO Auto-generated method stub
127 
128     }
129     
130     
131 
132 }

fragment代码:

 1 package com.example.standardwidget;
 2 
 3 import android.os.Bundle;
 4 import android.support.v4.app.Fragment;
 5 import android.view.Gravity;
 6 import android.view.LayoutInflater;
 7 import android.view.View;
 8 import android.view.ViewGroup;
 9 import android.widget.TextView;
10 
11 public class DummyFragment extends Fragment {
12     
13     protected static final String ARG_SELECTION_NUMBER ="selection_number";
14     //该方法的返回值就是该fragment显示的view组件
15     @Override
16     public View onCreateView(LayoutInflater inflater, ViewGroup container,
17             Bundle savedInstanceState) {
18         // TODO Auto-generated method stub
19         TextView textView = new TextView(getActivity());
20         textView.setGravity(Gravity.START);
21         //获取创建该fragment时传入的参数bundle
22         Bundle args = getArguments();
23         //设置TextView显示的文本
24         textView.setText(args.getInt(ARG_SELECTION_NUMBER)+"");
25         textView.setTextSize(30);
26         
27         
28         return textView;
29     }
30 }

运行该实例,效果如图:

技术分享技术分享

 

使用ActionBar实现Tab导航

标签:

原文地址:http://www.cnblogs.com/izhanjun/p/4200244.html

(2)
(1)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!