android4.4 Fragment +ViewPager+actionbar 使用

    在app开发中,我们可能会想要这样一个activiy——上面是actionbar,下面是fragment。这样实现的界面往往是要点击actionbar的对应item才能跳到对应的fragment中,但是不能滑动切换,甚是不便。那如何实现滑动切换,这就是这里要讲到的 ,Fragment +ViewPager+actionbar 使用。下面是我在某个界面开发中,实现这个功能的具体步骤:


         1. 首先要特别要注意几个包的引人,否则已一直报错(当时一直报错时,我甚至差点放弃了这个做法),

            正确的组合使用如下:

  1.   import android.support.v13.app.FragmentPagerAdapter;  
  2.   import android.support.v4.view.ViewPager;  
  3.   import android.support.v4.view.PagerAdapter;  
  4.   import android.support.v4.view.ViewPager.OnPageChangeListener;  

          2. 建一个viewpager,xml文件代码如下:

  1. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     android:layout_width="match_parent"  
  3.     android:layout_height="match_parent" >  
  4.   
  5.     <android.support.v4.view.ViewPager  
  6.         android:id="@+id/pager"  
  7.         android:layout_width="match_parent"  
  8.         android:layout_height="match_parent" />  
  9.     </FrameLayout>  


           3. 在activity的oncreate方法中获取viewPager,并且增加Adapter,PageChangeListener:

  1.         ViewPager viewPager = (ViewPager) findViewById(R.id.pager);  
  2.         viewPager.setAdapter(new ViewPagerAdapter(getFragmentManager()));  
  3.         viewPager.setOnPageChangeListener(mPageChangeListener);  
  4.         mViewPager = viewPager;</span>  


          4. 实现ViewPagerAdapter

  1. public class ViewPagerAdapter extends FragmentPagerAdapter {  
  2.      public ViewPagerAdapter(FragmentManager fm) {  
  3.          super(fm);  
  4.      }  
  5.   
  6.      @Override  
  7.      public Fragment getItem(int position) {  
  8.          switch (position) {  
  9.              case 0:  
  10.                  return mNetWorkFragment;//这是滑到第几就显示对应的Fragment  
  11.              case 1:  
  12.                  return mDeviceFragment;  
  13.              case 2:  
  14.                  return mPersonFragment;  
  15.              case 3:  
  16.                  return mMoreFragment;  
  17.           }  
  18.           return null;  
  19.      }  
  20.   
  21.      @Override  
  22.      public int getCount() {  
  23.          return 4; //这是 Fragment的数量  
  24.      }  
  25.   
  26.  }  


           5. OnPageChangeListener 的实现

  1.        private OnPageChangeListener mPageChangeListener = new OnPageChangeListener() {  
  2.             @Override  
  3.             public void onPageScrollStateChanged(int state) {  
  4.             }  
  5.   
  6.            @Override  
  7.             public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {  
  8.             }  
  9.   
  10.             @Override  
  11.             public void onPageSelected(int position) {  
  12.                 mActionBar.setSelectedNavigationItem(position);//这是当viewpager滑到不同的fragment时,actionbar要显示对应的tab  
  13.             }  

 

         6. actionbar的实例话:

  1.         mActionBar = getActionBar();  
  2.         mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);  
  3.         final Tab tab = mActionBar.newTab();  
  4.         LayoutInflater inflater = getLayoutInflater();  
  5.         View view = inflater.inflate(R.layout.setting_tab_new_ui, null);//setting_tab_new_ui 自定义的tab样式上面是图,下面是字  
  6.         ImageView dialView = (ImageView) view.findViewById(R.id.tab_icon);  
  7.         if (dialView != null) {  
  8.             dialView.setImageResource(R.drawable.tab_network);  
  9.         }  
  10.   
  11.         TextView dialText = (TextView) view.findViewById(R.id.tab_text);  
  12.   
  13.         </span>if (dialText != null) {  
  14.             dialText.setText(R.string.status_operator);  
  15.         }  
  16.   
  17.         tab.setCustomView(view);  
  18.         tab.setTabListener(mTabListener);  
  19.         mActionBar.addTab(tab);</span>  


             7. setting_tab_new_ui 如下:

  1.           <?xml version="1.0" encoding="utf-8"?>  
  2.                <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.                    android:layout_width="120dip"  
  4.                    android:layout_height="match_parent"  
  5.                    android:orientation="vertical" >  
  6.   
  7.                    <ImageView android:id="@+id/tab_icon"  
  8.                        android:layout_width="wrap_content"  
  9.                        android:layout_height="wrap_content"  
  10.                        android:layout_gravity="center"  
  11.                        android:scaleType="centerInside"  
  12.                        android:focusable="true"  
  13.                    />  
  14.   
  15.                    <TextView  
  16.                        android:id="@+id/tab_text"  
  17.                        android:layout_width="48dip"  
  18.                        android:layout_height="wrap_content"  
  19.                        android:layout_gravity="center"  
  20.                        android:gravity="center"  
  21.                        android:textSize="9sp"  
  22.                        android:textColor="@color/tab_text_color_normal_newui"  
  23.                        android:singleLine="true"  
  24.                        android:ellipsize="end"  
  25.                        android:scrollHorizontally="true"  
  26.                     />  
  27.   
  28.                  </LinearLayout>  


               8. actionbar的监听,TabListener 实现

 

    1.  private final TabListener mTabListener = new TabListener() {  
    2.     @Override  
    3.     public void onTabUnselected(Tab tab, FragmentTransaction ft) {  
    4.     }  
    5.   
    6.     @Override  
    7.     public void onTabSelected(Tab tab, FragmentTransaction ft) {  
    8.         mCurrentTabIndex = tab.getPosition();  
    9.         mViewPager.setCurrentItem(mCurrentTabIndex);//获取被选中的TabIndex,ViewPager显示对应的Fragment  
    10.     }  
    11.   
    12.     @Override  
    13.     public void onTabReselected(Tab tab, FragmentTransaction ft) {  
    14.     }  
    15.  };  
    16.   
    17.         public void setCurrentTab(int position) { //设置当时的 SelectedNavigationItem  
    18.             mCurrentTabIndex = position;  
    19.             if ((mActionBar.getNavigationMode() == ActionBar.NAVIGATION_MODE_TABS)  
    20.                && (mCurrentTabIndex != mActionBar.getSelectedNavigationIndex())) {  
    21.             mActionBar.setSelectedNavigationItem(mCurrentTabIndex);  
    22.         } 
posted @ 2016-11-05 17:00  天涯海角路  阅读(93)  评论(0)    收藏  举报