Android 利用ViewPager、Fragment、PagerTabStrip實現多頁面滑動效果

原帖:http://www.cnblogs.com/trinea/archive/2012/11/23/2771273.html

本文主要介紹如何利用ViewPager、Fragment、PagerTabStrip實現多頁面滑動效果。即google play首頁、新浪微博消息(at、評論、私信、廣播)頁面的效果。ViewPager+Fragment組合為google推薦方式,比TabActivity+Activity的效率高的多。

這個效果相當好!

1、新建ViewPager的layout,內容如下

[html] view plaincopyprint?

  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. <android.support.v4.view.ViewPager
  7. android:id="@+id/viewPager"
  8. android:layout_width_="wrap_content"
  9. android:layout_height="wrap_content"
  10. android:layout_gravity="center">
  11. <android.support.v4.view.PagerTabStrip
  12. android:layout_width_="wrap_content"
  13. android:layout_height="wrap_content"
  14. android:layout_gravity="top"/>
  15. </android.support.v4.view.ViewPager>
  16. </LinearLayout>

ViewPager用來管理layout並可以左右滑動顯示各個頁面數據,PagerTabStrip用來顯示頁面title,android:layout_gravity="top"表示title在頂部,可設置bottom等。

2、新建FragmentActivity頁面FragmentActivity頁面含有ViewPager元素,可以用來顯示Fragment,定義如下:

[java] view plaincopyprint?

  1. FragmentActivity頁面
  2. publicclassViewPagerDemoextendsFragmentActivity{
  3. /**頁面list**/
  4. List<Fragment>fragmentList=newArrayList<Fragment>();
  5. /**頁面titlelist**/
  6. List<String>titleList=newArrayList<String>();
  7. @Override
  8. protectedvoidonCreate(BundlesavedInstanceState){
  9. super.onCreate(savedInstanceState);
  10. setContentView(R.layout.view_pager_demo);
  11. ViewPagervp=(ViewPager)findViewById(R.id.viewPager);
  12. fragmentList.add(newViewPagerFragment1("頁面1"));
  13. fragmentList.add(newViewPagerFragment1("頁面2"));
  14. fragmentList.add(newViewPagerFragment1("頁面3"));
  15. titleList.add("title1");
  16. titleList.add("title2");
  17. titleList.add("title3");
  18. vp.setAdapter(newmyPagerAdapter(getSupportFragmentManager(),fragmentList,titleList));
  19. }
  20. /**
  21. *定義適配器
  22. *
  23. *@authorgxwu@lewatek.com2012-11-15
  24. */
  25. classmyPagerAdapterextendsFragmentPagerAdapter{
  26. privateList<Fragment>fragmentList;
  27. privateList<String>titleList;
  28. publicmyPagerAdapter(FragmentManagerfm,List<Fragment>fragmentList,List<String>titleList){
  29. super(fm);
  30. this.fragmentList=fragmentList;
  31. this.titleList=titleList;
  32. }
  33. /**
  34. *得到每個頁面
  35. */
  36. @Override
  37. publicFragmentgetItem(intarg0){
  38. return(fragmentList==null||fragmentList.size()==0)?null:fragmentList.get(arg0);
  39. }
  40. /**
  41. *每個頁面的title
  42. */
  43. @Override
  44. publicCharSequencegetPageTitle(intposition){
  45. return(titleList.size()>position)?titleList.get(position):"";
  46. }
  47. /**
  48. *頁面的總個數
  49. */
  50. @Override
  51. publicintgetCount(){
  52. returnfragmentList==null?0:fragmentList.size();
  53. }
  54. }
  55. }

其中的myPagerAdapter集成自ragmentPagerAdapter,為ViewPager提供數據源。

onCreate函數得到ViewPager實例並設置數據源,getSupportFragmentManager表示得到Fragment管理器。ViewPagerFragment1表示具體的頁面,見下面介紹。

3、新建Fragment頁面Fragment頁面即為左右滑動需要顯示的頁面,新建類集成Fragment,並重寫onCreateView函數即可。onCreateView函數相當於Activity的onCreate函數。如下:

[java] view plaincopyprint?

  1. publicclassViewPagerFragment1extendsFragment{
  2. privateStringtext;
  3. privateTextViewtv=null;
  4. publicViewPagerFragment1(Stringtext){
  5. super();
  6. this.text=text;
  7. }
  8. /**
  9. *覆蓋此函數,先通過inflaterinflate函數得到view最後返回
  10. */
  11. @Override
  12. publicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,BundlesavedInstanceState){
  13. Viewv=inflater.inflate(R.layout.view_pager_fragment_demo1,container,false);
  14. tv=(TextView)v.findViewById(R.id.viewPagerText);
  15. tv.setText(text);
  16. returnv;
  17. }
  18. }

簡單效果如下:


推薦閱讀:

Asp.net中的ViewState用法
GridView漂亮的樣式
2.4.7ListView的焦點問題 | 菜鳥教程

TAG:Android | 利用 | 效果 | 滑動 | 頁面 | 實現 | View |