1. 程式人生 > >利用ViewPager+Fragment+actionbar實現可左右滑動的Action Tab

利用ViewPager+Fragment+actionbar實現可左右滑動的Action Tab

  • 設定 ActionBar 的樣式,如:無回退按鍵、無標題等——setUpActionBar()
  • 初始化並設定 ViewPager,兩個要點:首先要定義並設定 ViewPager 所需要的資料控制類 ViewPagerAdapter,ViewPagerAdapter 必須實現如何返回對應位置的 Fragment、頁數、頁標題;其次,要實現 ViewPager 的翻頁監聽介面(OnPageChangeListener),主要是實現當前頁面被切換時需要導航到對應位置的action tab button,必要的時候,還需要實現在頁面翻動的各個狀態下(正在翻動、翻動即將停止、翻動完全停止)的相應處理——setUpViewPager()
  • 然後需要建立三個 tab button,並實現 tab 的監聽介面:主要是當選擇相應 tab 時,如何切換 ViewPager 的相應頁面——setUpTabs()
  • ActionTabWithSlippingFragmentActivity.java 的實現部分 
    1. publicclass ActionTabWithSlippingFragmentActivity extends FragmentActivity   
    2.                 implements ActionBar.TabListener{  
    3.     private Fragment1 mFragment1 = 
      new Fragment1();  
    4.     private Fragment2 mFragment2 = new Fragment2();  
    5.     private Fragment3 mFragment3 = new Fragment3();  
    6.     privatestaticfinalint TAB_INDEX_COUNT = 3;  
    7.     privatestaticfinalint TAB_INDEX_ONE = 0;  
    8.     privatestaticfinalint TAB_INDEX_TWO = 1;  
    9.     privatestaticfinalint
       TAB_INDEX_THREE = 2;  
    10.     private ViewPager mViewPager;  
    11.     private ViewPagerAdapter mViewPagerAdapter;  
    12.     /** Called when the activity is first created. */
    13.     @Override
    14.     publicvoid onCreate(Bundle savedInstanceState) {  
    15.         super.onCreate(savedInstanceState);  
    16.         setContentView(R.layout.main);  
    17.         setUpActionBar();  
    18.         setUpViewPager();  
    19.         setUpTabs();  
    20.     }  
    21.     privatevoid setUpActionBar() {  
    22.         final ActionBar actionBar = getActionBar();  
    23.         actionBar.setHomeButtonEnabled(false);  
    24.         actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);  
    25.         actionBar.setDisplayShowTitleEnabled(false);  
    26.         actionBar.setDisplayShowHomeEnabled(false);  
    27.     }  
    28.     privatevoid setUpViewPager() {  
    29.         mViewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());  
    30.         mViewPager = (ViewPager)findViewById(R.id.pager);  
    31.         mViewPager.setAdapter(mViewPagerAdapter);  
    32.         mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {  
    33.             @Override
    34.             publicvoid onPageSelected(int position) {  
    35.                 final ActionBar actionBar = getActionBar();  
    36.                 actionBar.setSelectedNavigationItem(position);  
    37.             }  
    38.             @Override
    39.             publicvoid onPageScrollStateChanged(int state) {  
    40.                 switch(state) {  
    41.                     case ViewPager.SCROLL_STATE_IDLE:  
    42.                         //TODO
    43.                         break;  
    44.                     case ViewPager.SCROLL_STATE_DRAGGING:  
    45.                         //TODO
    46.                         break;  
    47.                     case ViewPager.SCROLL_STATE_SETTLING:  
    48.                         //TODO
    49.                         break;  
    50.                     default:  
    51.                         //TODO
    52.                         break;  
    53.                 }  
    54.             }  
    55.         });  
    56.     }  
    57.     privatevoid setUpTabs() {  
    58.         final ActionBar actionBar = getActionBar();  
    59.         for (int i = 0; i < mViewPagerAdapter.getCount(); ++i) {  
    60.             actionBar.addTab(actionBar.newTab()  
    61.                     .setText(mViewPagerAdapter.getPageTitle(i))  
    62.                     .setTabListener(this));  
    63.         }  
    64.     }  
    65.     @Override
    66.     protectedvoid onDestroy() {  
    67.         super.onDestroy();  
    68.     }  
    69.     publicclass ViewPagerAdapter extends FragmentPagerAdapter {  
    70.         public ViewPagerAdapter(FragmentManager fm) {  
    71.             super(fm);  
    72.             // TODO Auto-generated constructor stub
    73.         }  
    74.         @Override
    75.         public Fragment getItem(int position) {  
    76.             // TODO Auto-generated method stub
    77.             switch (position) {  
    78.                 case TAB_INDEX_ONE:  
    79.                     return mFragment1;  
    80.                 case TAB_INDEX_TWO:  
    81.                     return mFragment2;  
    82.                 case TAB_INDEX_THREE:  
    83.                     return mFragment3;  
    84.             }  
    85.             thrownew IllegalStateException("No fragment at position " + position);  
    86.         }  
    87.         @Override
    88.         publicint getCount() {  
    89.             // TODO Auto-generated method stub
    90.             return TAB_INDEX_COUNT;  
    91.         }  
    92.         @Override
    93.         public CharSequence getPageTitle(int position) {  
    94.             String tabLabel = null;  
    95.             switch (position) {  
    96.                 case TAB_INDEX_ONE:  
    97.                     tabLabel = getString(R.string.tab_1);  
    98.                     break;  
    99.                 case TAB_INDEX_TWO:  
    100.                     tabLabel = getString(R.string.tab_2);  
    101.                     break;  
    102.                 case TAB_INDEX_THREE: