有暇,总结一下viewpager+fragment的使用。

先来看看效果图:



有三个标题,三个fragment,滑动时标题的颜色会随着变化。

MainActivity.java

  1. public class MainActivity extends FragmentActivity {
  2. private ViewPager vp;
  3. private Fragment f1, f2, f3;
  4. //把所有的Fragment装到一个List中
  5. private List<Fragment> fs;
  6. private FragmentPagerAdapter fpa;
  7. private TextView tv1, tv2, tv3;
  8. @Override
  9. protected void onCreate(Bundle savedInstanceState) {
  10. super.onCreate(savedInstanceState);
  11. setContentView(R.layout.activity_main);
  12. vp = (ViewPager) this.findViewById(R.id.vp1);
  13. initView();
  14. //一个适配器,里边存的都是Fragment
  15. fpa = new FragmentPagerAdapter(getSupportFragmentManager()) {
  16. @Override
  17. public int getCount() {
  18. return fs.size();
  19. }
  20. @Override
  21. public Fragment getItem(int arg0) {
  22. return fs.get(arg0);
  23. }
  24. };
  25. vp.setAdapter(fpa);
  26. /**
  27. * 三个方法的执行顺序为:用手指拖动翻页时,最先执行一遍onPageScrollStateChanged(1),
  28. * 然后不断执行onPageScrolled,放手指的时候,直接立即执行一次onPageScrollStateChanged(2),
  29. * 然后立即执行一次onPageSelected,然后再不断执行onPageScrolled,
  30. * 最后执行一次onPageScrollStateChanged(0)。
  31. */
  32. vp.setOnPageChangeListener(new OnPageChangeListener() {
  33. /**
  34. * position代表哪个页面被选中
  35. */
  36. @Override
  37. public void onPageSelected(int position) {
  38. switch (position) {
  39. case 0:
  40. changeTitleBackground(0);
  41. break;
  42. case 1:
  43. changeTitleBackground(1);
  44. break;
  45. case 2:
  46. changeTitleBackground(2);
  47. break;
  48. default:
  49. break;
  50. }
  51. Log.i("lenve", "onPageSelected"+position);
  52. }
  53. /**
  54. * 有三个参数,第一个position,这个参数要特别注意一下。当用手指滑动时,如果手指按在页面上不动,
  55. * position和当前页面index是一致的
  56. * 如果手指向左拖动(相应页面向右翻动),这时候position大部分时间和当前页面是一致的,
  57. * 只有翻页成功的情况下最后一次调用才会变为目标页面;如果手指向右拖动(相应页面向左翻动),
  58. * 这时候position大部分时间和目标页面是一致的,只有翻页不成功的情况下最后一次调用才会变为原页面。
  59. * 当直接设置setCurrentItem翻页时,如果是相邻的情况(比如现在是第二个页面,跳到第一或者第三个页面),
  60. * 如果页面向右翻动,大部分时间是和当前页面是一致的,只有最后才变成目标页面;如果向左翻动,position和目标页面是一致的。
  61. * 这和用手指拖动页面翻动是基本一致的。
  62. * 如果不是相邻的情况,比如我从第一个页面跳到第三个页面,position先是0,然后逐步变成1,
  63. * 然后逐步变成2;我从第三个页面跳到第一个页面, position先是1,然后逐步变成0,并没有出现为2的情况。
  64. * positionOffset是当前页面滑动比例,如果页面向右翻动,这个值不断变大,最后在趋近1的情况后突变为0。
  65. * 如果页面向左翻动,这个值不断变小,最后变为0。
  66. * positionOffsetPixels是当前页面滑动像素,变化情况和positionOffset一致。
  67. */
  68. // 在屏幕滚动过程中不断被调用
  69. @Override
  70. public void onPageScrolled(int position,float positionOffset, int positionOffsetPixels) {
  71. Log.i("lenve", "onPageScrolled"+position);
  72. }
  73. /**
  74. * onPageScrollStateChanged(int state):这个方法在手指操作屏幕的时候发生变化。
  75. * 有三个值:0(END),1(PRESS) , 2(UP) 。 当用手指滑动翻页时,手指按下去的时候会触发这个方法,state值为1
  76. * 手指抬起时,如果发生了滑动(即使很小),这个值会变为2,然后最后变为0
  77. * 总共执行这个方法三次。一种特殊情况是手指按下去以后一点滑动也没有发生,这个时候只会调用这个方法两次,state值分别是1,0 。
  78. * 当setCurrentItem翻页时,会执行这个方法两次,state值分别为2 , 0 。
  79. */
  80. @Override
  81. public void onPageScrollStateChanged(int state) {
  82. Log.i("lenve", "onPageScrollStateChanged"+state);
  83. }
  84. });
  85. //设置默认显示页
  86. vp.setCurrentItem(0);
  87. }
  88. private void initView() {
  89. tv1 = (TextView) this.findViewById(R.id.tv1);
  90. tv2 = (TextView) this.findViewById(R.id.tv2);
  91. tv3 = (TextView) this.findViewById(R.id.tv3);
  92. //设置tv1的默认颜色
  93. tv1.setTextColor(Color.GREEN);
  94. fs = new ArrayList<Fragment>();
  95. f1 = new Fragment1();
  96. f2 = new Fragment2();
  97. f3 = new Fragment3();
  98. fs.add(f1);
  99. fs.add(f2);
  100. fs.add(f3);
  101. }
  102. //滑动时修改标题颜色
  103. private void changeTitleBackground(int i) {
  104. switch (i) {
  105. case 0:
  106. tv1.setTextColor(Color.GREEN);
  107. tv2.setTextColor(Color.GRAY);
  108. tv3.setTextColor(Color.GRAY);
  109. break;
  110. case 1:
  111. tv1.setTextColor(Color.GRAY);
  112. tv2.setTextColor(Color.GREEN);
  113. tv3.setTextColor(Color.GRAY);
  114. break;
  115. case 2:
  116. tv1.setTextColor(Color.GRAY);
  117. tv2.setTextColor(Color.GRAY);
  118. tv3.setTextColor(Color.GREEN);
  119. break;
  120. default:
  121. break;
  122. }
  123. }
  124. }

注释里边说的比较清楚了,再看看布局文件:

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical"
  6. tools:context="com.example.viewpagertest.MainActivity" >
  7. <LinearLayout
  8. android:layout_width="match_parent"
  9. android:layout_height="wrap_content"
  10. android:orientation="horizontal" >
  11. <TextView
  12. android:id="@+id/tv1"
  13. android:layout_width="wrap_content"
  14. android:layout_height="wrap_content"
  15. android:layout_weight="1"
  16. android:gravity="center_horizontal"
  17. android:text="f1" />
  18. <TextView
  19. android:id="@+id/tv2"
  20. android:layout_width="wrap_content"
  21. android:layout_height="wrap_content"
  22. android:layout_weight="1"
  23. android:gravity="center_horizontal"
  24. android:text="f2" />
  25. <TextView
  26. android:id="@+id/tv3"
  27. android:layout_width="wrap_content"
  28. android:layout_height="wrap_content"
  29. android:layout_weight="1"
  30. android:gravity="center_horizontal"
  31. android:text="f3" />
  32. </LinearLayout>
  33. <android.support.v4.view.ViewPager
  34. android:id="@+id/vp1"
  35. android:layout_width="match_parent"
  36. android:layout_height="match_parent" />
  37. </LinearLayout>

另外,三个fragment都是普通的fragment,这里就不贴代码了。

本项目源码下载

版权声明:本文为博主原创文章,未经博主允许不得转载。若有错误地方,还望批评指正,不胜感激。

viewpager+fragment学习笔记的更多相关文章

  1. Fragment 学习笔记(1)

    网上关于Fragment相关的博客资料很多,写关于这个知识笔记是加深记忆,大神略过: 0x01 了解Fragment 当然看官方文档(http://www.android-doc.com/refere ...

  2. Android Fragment学习笔记(二)----Fragment界面添加和管理

    Fragment界面添加 了解过fragment的生命周期等简单知识,于是去看官方文档来了解更多相关内容,要添加fragment到我们的UI界面中,给出了两种常用的方法,第一个是在activity的布 ...

  3. Fragment学习笔记

    Fragment为大量型号,尺寸,分辨率的设备提供了一种统一的UI优化方案.将Activity分解为多个Fragment,将极大地提高UI的灵活性,也更容易为一些新的设备配置带来更好的用户体验. on ...

  4. Android之Fragment学习笔记②(Fragment生命周期)

    一. Fragment生命周期图                                  二.Fragment生命周期方法介绍 Fragment的生命周期和activity生命周期很像,其生 ...

  5. Android之Fragment学习笔记①

    Android Fragment完全解析,关于碎片你所需知道的一切 一. 什么是FragmentFragment(碎片)就是小型的Activity,它是在Android3.0时出现的.Fragment ...

  6. [android]p7-1 fragment学习笔记

    本文源自<android权威编程指南第3版>第7章UI fragment与fragment 第7章主要内容是实现一个记录不良行为的APP(部分实现),有列表,有具体的行为内容显示.第7章主 ...

  7. 【转】 Pro Android学习笔记(四二):Fragment(7):切换效果

    目录(?)[-] 利用setTransition 利用setCustomAnimations 通过ObjectAnimator自定义动态效果 程序代码的编写 利用fragment transactio ...

  8. 【转】 Pro Android学习笔记(四十):Fragment(5):适应不同屏幕或排版

    目录(?)[-] 设置横排和竖排的不同排版风格 改写代码 对于fragment,经常涉及不同屏幕尺寸和不同的排版风格.我们在基础小例子上做一下改动,在横排的时候,仍是现实左右两个fragment,在竖 ...

  9. 两千行PHP学习笔记

    亲们,如约而至的PHP笔记来啦~绝对干货! 以下为我以前学PHP时做的笔记,时不时的也会添加一些基础知识点进去,有时还翻出来查查. MySQL笔记:一千行MySQL学习笔记http://www.cnb ...

随机推荐

  1. caffe---测试模型分类结果并输出(python )

    当训练好一个model之后,我们通常会根据这个model最终的loss和在验证集上的accuracy来判断它的好坏.但是,对于分类问题,我们如果只是知道整体的分类正确率 显然还不够,所以只有知道模型对 ...

  2. 共享式以太网与交换式以太网的性能比较(OPNET网络仿真实验)

      一.实验目的 比较共享式以太网和交换式以太网在不同网络规模下的性能. 二.实验方法 使用opnet来创建和模拟网络拓扑,并运行分析其性能. 三.实验内容 3.1   实验设置(网络拓扑.参数设置. ...

  3. javascript学习代码-判断闰年

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. jQuery中的data方法:

    向元素附加数据,然后取回该数据: $("#btn1").click(function(){ $("div").data("greeting" ...

  5. 解决poi导出Excel异常org.openxmlformats.schemas.spreadshe

    JAVA报表 POI未捕获到 servlet OUTEXCEL 的其中一个服务方法中抛出的异常.抛出的异常:java.lang.NoClassDefFoundError: org.openxmlfor ...

  6. Servlet 中使用POI生成Excel

    使用的是poi3.13 http://mvnrepository.com/artifact/org.apache.poi/poi/3.13 import java.io.IOException; im ...

  7. 5种php加密工具zendGuard、ionCube、SourceCop、SourceGuardian、phpShield

    PHP做桌面应用的想法: 除去icudt55.dll,PHP7用7ZIP压缩后不足7MB,而PHP自带了SQLite和CLI HTTP Server,用户打开浏览器就能访问PHP开发的桌面应用.如果源 ...

  8. Delphi_OD_代码_调试_Delphi反调试技术(以OD为例附核心原代码)

    1.程序窗口[chuang kou]句柄[ju bing]检测原理:用FindWindow函数[han shu]查找[cha zhao]具有相同窗口[chuang kou]类名和标题的窗口[chuan ...

  9. ssh 认证指定端口

    [root@database2 ~]# cat ssh.sh if [ ! $# -eq 2 ] ;then echo "请输入用户密码以空格分开" exit else ssh-k ...

  10. 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...