ActionBar(已過時,檢視ToolBar)+Fragment實作頁籤的步驟:
- 目前窗體Activity類要繼承于FragmentActivity,而不是Activity;
- 擷取ActionBar對象:通過目前上下文對象的getActionBar()方法來實作;
- 設定ActionBar對象的導航模式為Tab導航模式;
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
- 分别建立Tab對象:
- 通過ActionBar對象的newTab()方法建立Tab對象;
- 通過Tab對象的setText()設定頁籤文字;
- 通過Tab對象的setTabListener()設定頁籤監聽事件。
- 自定義ActionBar.TabListener的監聽器;
- 為ActionBar對象添加Tab對象。通過ActionBar對象的addTab()方法實作添加頁籤。
參考代碼
MainActivity.java
package com.noonecode.actionbartabdemo;
import java.util.ArrayList;
import java.util.List;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
@SuppressWarnings("deprecation")
public class MainActivity extends FragmentActivity {
private List<Fragment> fragments;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 擷取ActionBar
ActionBar actionBar = getActionBar();
// ActionBar設定Tab模式
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// initdata
fragments = new ArrayList<Fragment>();
fragments.add(new FragmentRecord());
fragments.add(new FragmentContacts());
fragments.add(new FragmentFavor());
// Tag區分tab
Tab tab1 = actionBar.newTab().setTag().setText("通訊記錄").setTabListener(listener);
Tab tab2 = actionBar.newTab().setTag().setText("聯系人").setTabListener(listener);
Tab tab3 = actionBar.newTab().setTag().setText("收藏夾").setTabListener(listener);
actionBar.addTab(tab1);
actionBar.addTab(tab2);
actionBar.addTab(tab3);
}
private TabListener listener = new TabListener() {
@Override
public void onTabSelected(Tab tab, android.app.FragmentTransaction ft) {
// 目前tab的tag作為fragments的index下标
int position = (Integer) tab.getTag();
// 切換頁面
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fl_container, fragments.get(position));
fragmentTransaction.commit();
}
@Override
public void onTabUnselected(Tab tab, android.app.FragmentTransaction ft) {
}
@Override
public void onTabReselected(Tab tab, android.app.FragmentTransaction ft) {
}
};
}
activity_main.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/fl_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.noonecode.actionbartabdemo.MainActivity" >
</FrameLayout>
每個Fragment很簡單,不再贅述。
示例效果
注意
- 開始actionBar.setTab(…)方法,預設會觸發TabListener的onTabSelected方法選中第一個Tab,這裡需要注意一下。
- 注意幾個Fragment複制的時候,布局不要加載錯了。
(完畢)
導航:
Android 導覽列效果實作(一) TabActivity+TabHost
http://blog.csdn.net/qq_33425116/article/details/52573967
Android 導覽列效果實作(二) FragmentTabHost
http://blog.csdn.net/qq_33425116/article/details/52575811
Android 導覽列效果實作(三) ViewPager+PagerTabStrip
http://blog.csdn.net/qq_33425116/article/details/52577570
Android 導覽列效果實作(四) ViewPager+自定義導覽列
http://blog.csdn.net/qq_33425116/article/details/52584282
Android 導覽列效果實作(五) ActionBar+Fragment
http://blog.csdn.net/qq_33425116/article/details/52587635
Android 導覽列效果實作(六) TabLayout+ViewPager+Fragment
http://blog.csdn.net/qq_33425116/article/details/52599818