1. 程式人生 > >Android ViewPager分頁+fragment功能

Android ViewPager分頁+fragment功能

仿照Android4.0撥號介面實現分頁的介面,如下:


1、ViewPager是安卓的擴充套件包,可以從原始碼out/target/common/obj/JAVA_LIBRARIES/android-support-v13-intermediates/classes.jar拷貝,注意是android-support-V13而不是android-support-v4,因為Activity中getFragmentManager()返回的android.app.FragmentManager物件,而v4中FragmentAdapter的建構函式引數型別android.v4.Fragmentmanager,所以你懂的,不相容,而v13完美相容。


2、main.xml佈局如下:

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3.     android:layout_width="match_parent"
  4.     android:layout_height="match_parent"
  5.     android:id="@+id/acti_frame">
  6.     <!-- 此處需要給出全路徑-->
  7.     <android.support.v4.view.ViewPager
  8.         android:id="@+id/viewpagerLayout"
  9.         android:layout_width="fill_parent"
  10.         android:layout_height="fill_parent"/>
  11. </LinearLayout>

ps:ViewPager加上全路徑

3、自定義3個Fragment,Fragment在3.0推出,作用很多,使用方法推薦一個帖子

【eoeandroid索引】android fragment知識彙總
http://www.eoeandroid.com/thread-172624-1-1.html

Fragment的實現如下:

  1. publicclass Fragment1 extends Fragment {  
  2.     @Override
  3.     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {  
  4.         View root = inflater.inflate(R.layout.fragmentlayout1, container, false);  
  5.         return root;  
  6.     }  
  7. }  

其中動態載入的佈局fragmentlayout.xml如下:
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns: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.     <TextViewandroid:layout_width="fill_parent"
  7.         android:layout_height="wrap_content"
  8.         android:text="fragmentlayout1"
  9.         android:textSize="22sp"
  10.         android:gravity="center"
  11.         />
  12. </LinearLayout>

Fragment2和Fragment3的實現和1雷同,就不貼出來了

4、Activity中使用ViewPager和Fragment,程式碼如下:

  1. publicclass FragmentViewPagerTestActivity extends Activity {  
  2.     privatefinalstatic String TAG = "FragmentViewPagerTestActivity";  
  3.     privatefinal PageChangeListener mPageChangeListener = new PageChangeListener();  
  4.     private ViewPager vp = null;  
  5.     privatefinalint TAB_INDEX1 = 0;  
  6.     privatefinalint TAB_INDEX2 = 1;   
  7.     privatefinalint TAB_INDEX3 = 2;  
  8.     privatefinalint TAB_INDEX_COUNT = 3;  
  9.     /** Called when the activity is first created. */
  10.     @Override
  11.     publicvoid onCreate(Bundle savedInstanceState) {  
  12.         super.onCreate(savedInstanceState);  
  13.         setContentView(R.layout.main);  
  14.         findView();  
  15.         initView();  
  16.         vp.setOnPageChangeListener(mPageChangeListener);  
  17.         setupFragment1Tab();  
  18.         setupFragment2Tab();  
  19.         setupFragment3Tab();  
  20.         getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);  
  21.         getActionBar().setDisplayShowTitleEnabled(false);  
  22.         getActionBar().setDisplayShowHomeEnabled(false);  
  23.     }  
  24.     privateclass PageChangeListener implements OnPageChangeListener {  
  25.         privateint mCurrentPosition = -1;  
  26.         privateint mNextPosition = -1;  
  27.         @Override
  28.         publicvoid onPageScrollStateChanged(int arg0) {  
  29.             // TODO Auto-generated method stub
  30.         }  
  31.         @Override
  32.         publicvoid onPageScrolled(int arg0, float arg1, int arg2) {  
  33.             // TODO Auto-generated method stub
  34.         }  
  35.         @Override
  36.         publicvoid onPageSelected(int arg0) {  
  37.             final ActionBar actionBar = getActionBar();  
  38.             if(mCurrentPosition == arg0) {  
  39.                 Log.e(TAG , "Previous posion and next position is same");  
  40.             }  
  41.             actionBar.selectTab(actionBar.getTabAt(arg0));  
  42.             mNextPosition = arg0;  
  43.         }  
  44.         publicvoid setCurrentPosition(int position) {  
  45.             mCurrentPosition = position;  
  46.         }  
  47.     }  
  48.     private TabListener mTabListener = new TabListener() {  
  49.         @Override
  50.         publicvoid onTabReselected(Tab tab, FragmentTransaction ft) {  
  51.         }  
  52.         @Override
  53.         publicvoid onTabSelected(Tab tab, FragmentTransaction ft) {  
  54.             if(vp.getCurrentItem() != tab.getPosition()) {  
  55.                 vp.setCurrentItem(tab.getPosition(),true);  
  56.             }  
  57.         }  
  58.         @Override
  59.         publicvoid onTabUnselected(Tab tab, FragmentTransaction ft) {  
  60.         }  
  61.     };  
  62.     privatevoid setupFragment1Tab() {  
  63.         Tab tab = getActionBar().newTab();  
  64.         tab.setText("Fragment1");  
  65.         tab.setTabListener(mTabListener);  
  66.         getActionBar().addTab(tab);  
  67.     }  
  68.     privatevoid setupFragment2Tab() {  
  69.         Tab tab = getActionBar().newTab();  
  70.         tab.setText("Fragment2");  
  71.         tab.setTabListener(mTabListener);  
  72.         getActionBar().addTab(tab);  
  73.     }  
  74.     privatevoid setupFragment3Tab() {  
  75.         Tab tab = getActionBar().newTab();  
  76.         tab.setText("Fragment3");  
  77.         tab.setTabListener(mTabListener);  
  78.         getActionBar().addTab(tab);  
  79.     }  
  80.     privatevoid findView() {  
  81.         vp = (ViewPager) findViewById(R.id.viewpagerLayout);  
  82.     }  
  83.     privatevoid initView() {  
  84.         android.app.FragmentManager fm = getFragmentManager();  
  85.         vp.setAdapter(new MyViewPagerAdapter(fm));  
  86.     }  
  87.     publicclass MyViewPagerAdapter extends FragmentPagerAdapter {  
  88.         public MyViewPagerAdapter(FragmentManager fm) {  
  89.             super(fm);  
  90.         }  
  91.         @Override
  92.         public Fragment getItem(int arg0) {  
  93.             switch(arg0) {  
  94.             case TAB_INDEX1:  
  95.                 returnnew Fragment1();  
  96.             case TAB_INDEX2:  
  97.                 returnnew Fragment2();  
  98.             case TAB_INDEX3:  
  99.                 returnnew Fragment3();  
  100.             }  
  101.             returnnull;  
  102.         }  
  103.         @Override
  104.         publicint getCount() {  
  105.             return TAB_INDEX_COUNT;  
  106.         }  
  107.     }  
  108. }  

PS:getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);指定定位模式為TABs,不能少;

轉自:http://blog.csdn.net/aiai373824745/article/details/7619054點選開啟連結