第一步:给出布局文件如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:id="@+id/container">
</LinearLayout>
这个LinearLayout的作用是作为tab标签的内容显示页面
第二步:编写TabActivity,实现ActionBar.TabListener接口,代码如下:
public class TabActivity extends Activity implements ActionBar.TabListener{
private final static String SELECTED_ITEM = "selected_item";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tab);
final ActionBar actionBar = getActionBar();
// actionBar设置导航模式
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// actionBar依次添加三个Tab标签 并为三个标签都添加监听器
actionBar.addTab(actionBar.newTab().setText("第一页").setTabListener(this));
actionBar.addTab(actionBar.newTab().setText("第二页").setTabListener(this));
actionBar.addTab(actionBar.newTab().setText("第三页").setTabListener(this));
}
// 当指定的Tab被选择时执行这个方法
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
Fragment fragment = new DummyFragment();
Bundle args = new Bundle();
args.putInt(DummyFragment.ARG_SECTION_NUMBER,tab.getPosition()+1);
fragment.setArguments(args);
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.container,fragment);
// 提交事务
transaction.commit();
}
@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
}
@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
}
// 将保存在Bundle数据中fragment的索引值取出来,恢复以前选择的tab页的内容
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
if(savedInstanceState.containsKey(SELECTED_ITEM)){
getActionBar().setSelectedNavigationItem(savedInstanceState.getInt(SELECTED_ITEM));
}
}
// 将当前fragment页的索引保存到Bundle中去
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(SELECTED_ITEM,getActionBar().getSelectedNavigationIndex());
}
}
第三步:编写DummyFragment的代码:
public class DummyFragment extends Fragment{
public final static String ARG_SECTION_NUMBER = "section_number";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
TextView textView = new TextView(getActivity());
textView.setGravity(Gravity.START);
Bundle args = getArguments();
textView.setText(args.getInt(ARG_SECTION_NUMBER)+"");
textView.setTextSize(28);
return textView;
}
}
运行效果如下:
注:ActionBar的这种导航方式从android 5.0后就不推荐使用,而推荐使用ActionBar上的图标导航