在上一篇文章中,讲解了使用PagerAdapter作为适配器时的ViewPager的使用方法。然后在实际项目中更多的使用Fragment作为页卡,因为实际开发中每一个页卡要复杂的多。而使用Fragment有利于切断每一个页卡与MainActivity的联系,在各自的Fragment上实现自己更复杂的功能。其实使用Fragment作为填充,大部分的代码都与使用View作为填充类似,如果你还不知道怎么使用View来作为页卡,可以点击下面的链接,进行阅读学习:

http://www.cnblogs.com/fuly550871915/p/4922953.html

下面我们以一个完整的例子,来讲一下使用FragmenStatePagerAdapter作为适配器,ViewPager使用方法。由于大部分的知识都在上一篇文章(使用View作为填充ViewPager)中讲过,因此具体的代码解释就不再进行了。

新建项目,然后新建布局,作为Fragment的填充物。首先是layout1.xml。如下:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我是第一个界面"
android:textSize="30sp"/> </LinearLayout>

代码很简单,不解释。然后再建立同样的三个布局,分别命名为layout2.xml,layout3.xml,layout4.xml。唯一不同的就是第10行文本的显示不同而已。具体代码同上,就不贴出来了。然后就可以建立Fragment类了。

新建类Fragment1,继承自Fragment。其中的代码如下:

 package com.example.viewpager;

 import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup; public class Fragment1 extends Fragment{ public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { return inflater.inflate(R.layout.layout1, null);
}
}

从代码中发现,将layout1这个布局加载给了Fragment1.同样的道理,新建Fragment2,Fragment3,Fragment4,分别用来加载layout2,layout3,layout4.

就这样子,所有的Fragment都准备好了。下面开始写适配器,就采用FragmentStatePagerAdapter吧。代码如下:

 package com.example.viewpager;

 import java.util.List;

 import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.view.ViewGroup; /**
* ViewPager的适配器
* @author fuly1314
*
*/
public class FragmentAdapter extends FragmentStatePagerAdapter{ private List<Fragment> fragmentList;//数据源
private List<String> titles;//标题 public FragmentAdapter(FragmentManager fm,List<Fragment> fragmentList,List<String> titles) {
21 super(fm);
22 this.fragmentList = fragmentList;
23 this.titles = titles;
24 } //相应页卡设定相应的Fragment
public Fragment getItem(int arg0) { return fragmentList.get(arg0);
} //数据源的数目
public int getCount() { return fragmentList.size();
} /*
* 对于FragmentStatePagerAdapter,它的销毁和实例方法,即
* destroyItem和instantiateItem方法保持默认即可
*/
public void destroyItem(ViewGroup container, int position, Object object) {
43
44 super.destroyItem(container, position, object);
45 }
46
47 public Object instantiateItem(ViewGroup arg0, int arg1) {
48
49 return super.instantiateItem(arg0, arg1);
50 }
51
52 //设定标题
53 public CharSequence getPageTitle(int position) {
54
55 return titles.get(position);
56 } }

注意的红色的代码。应该注意的是,FragmentStatePagerAdapter的销毁item和显示item的方法都保持默认的写法即可。

然后就是MainActivity中的代码了,如下:

 package com.example.viewpager;

 import java.util.ArrayList;
import java.util.List; import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.PagerTabStrip;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.LayoutInflater;
import android.widget.Toast;
import android.graphics.Color; public class MainActivity extends FragmentActivity implements OnPageChangeListener{ private ViewPager pager;
private List<Fragment> fragmentList = new ArrayList<Fragment>();//数据源
private FragmentAdapter fragmentAdapter; private List<String> titles = new ArrayList<String>();//标题 private PagerTabStrip pagerTitle;//ViewPager的标题 protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //获取ViewPager
pager = (ViewPager) findViewById(R.id.view_pager); pager.setOnPageChangeListener(this);//设置监听器 //获取pagerTitle
pagerTitle = (PagerTabStrip) findViewById(R.id.pager_title); //为标题设置属性,比如背景,颜色线等
pagerTitle.setBackgroundColor(Color.RED);//设置背景颜色
pagerTitle.setTextColor(Color.YELLOW);//设置标题文字的颜色
pagerTitle.setDrawFullUnderline(false);//将标题下的长分割线去掉
pagerTitle.setTabIndicatorColor(Color.BLUE);//设置标题下粗一点的短分割线的颜色 //添加标题
titles.add("第一页");
titles.add("第二页");
titles.add("第三页");
titles.add("第四页"); //获取四个Fragment
Fragment1 fragment1 = new Fragment1();
Fragment2 fragment2 = new Fragment2();
Fragment3 fragment3 = new Fragment3();
Fragment4 fragment4 = new Fragment4(); //将四个Fragment加入到集合
fragmentList.add(fragment1);
fragmentList.add(fragment2);
fragmentList.add(fragment3);
fragmentList.add(fragment4); //实例化适配器
fragmentAdapter = new FragmentAdapter(getSupportFragmentManager(),fragmentList,titles); //设置适配器
pager.setAdapter(fragmentAdapter);
} //当滚动状态改变时被调用
public void onPageScrollStateChanged(int arg0) { } //滚动时调用
public void onPageScrolled(int arg0, float arg1, int arg2) { } //当页卡被选中时调用
public void onPageSelected(int arg0) { Toast.makeText(this, "这是第"+(arg0+1)+"个界面", Toast.LENGTH_LONG).show(); } }

注意红色的代码,此时继承的是FragmentActivity。而且所有导入的包,都应该是android.support.v4下的。

好了,现在都写好了,运行程序即可,效果图如下:

总结:
如果用Fragment作为页卡,需要注意:
(1)活动继承的是FragmentActivity,而不是Activity。
(2)相关的导包都应该是android.support.v4下的包。
(3)对于FragmentStatePagerAdapter,它的destroyItem和instantiateItem方法保持默认即可,不用编写。

使用Fragment填充ViewPager的更多相关文章

  1. Android流行界面结构——Fragment通过ViewPager(带指示器)嵌套Fragment结构的创建方法详解

    原创文章,转载请注明出处http://www.cnblogs.com/baipengzhan/p/6287213.html 当前Android流行界面结构的一种——Fragment通过ViewPage ...

  2. Fragment与ViewPager

    众所周知,为了实现滑动界面,经常让Fragment与ViewPager一起结合使用,每一个ViewPager的页面就是一个Fragment,我们可以在fragment中实现丰富的功能.它的基本用法可以 ...

  3. Android之ActionBar、Tabs、Fragment、ViewPager实现标签页切换并缓存页面

    感觉 Android 到处都是坑,每个地方都要把人折腾半天. 今天来简单说说 Android之ActionBar.Tabs.Fragment.ViewPager 实现标签页切换并缓存页面 关于他们的介 ...

  4. Android Tab类型主界面 Fragment+TabPageIndicator+ViewPager

    文章地址: Android项目Tab类型主界面大总结 Fragment+TabPageIndicator+ViewPager 1.使用ViewPager + PagerAdapter 每个页面的内容都 ...

  5. 使用View填充ViewPager

    ViewPager在app开发中十分常见.今天以一个例子详细解读下ViewPager的基础知识. 一.什么是ViewPager 可以这样理解,ViewPager就相当于一个容器,它的里面可以装view ...

  6. Android中Fragment和ViewPager那点事儿(仿微信APP)

    在之前的博文<Android中使用ViewPager实现屏幕页面切换和引导页效果实现>和<Android中Fragment的两种创建方式>以及<Android中Fragm ...

  7. android fragment+ FragmentTabHost+viewpager 切换状态不保存的问题

    转载请注明出处:http://blog.csdn.net/djy1992/article/details/46674169 @author dujinyang 难得有时间上来写博客. fragment ...

  8. 【原创】【ViewPager+Fragment】ViewPager中切换界面Fragment被销毁的问题分析

    ViewPager中切换界面Fragment被销毁的问题分析   1.使用场景 ViewPager+Fragment实现界面切换,界面数量>=3   2.Fragment生命周期以及与Activ ...

  9. Android项目Tab类型主界面大总结 Fragment+TabPageIndicator+ViewPager

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24740977 Android如今实现Tab类型的界面方式越来越多,今天就把常见的 ...

随机推荐

  1. 快手、抖音、微视类短视频SDK接入教程,7步就能搞定

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由视频咖 发表于云+社区专栏 终端部分 按照如下三步操作,可以用 XCode 或者 Android Studio 编译和调试小视频 Ap ...

  2. Boost application performance using asynchronous I/O-ref

    http://www.ibm.com/developerworks/linux/library/l-async/?S_TACT=105AGX52&S_CMP=cn-a-l Introducti ...

  3. Windows加密API的功能分类

    本地数据加密保护本地数据加密保护机制提供了简单的DAPI调用接口,密钥管理等等一概由系统来处理.DAPI的数据加密保护机制在用户登录会话范围或者本地计算范围,使用操作系统设计的方式加密保护数据和解密还 ...

  4. Java给树加子节点个数统计

    通过后台实现 private List<Photo> getChildren(Photo photo) { List<Photo> children = new ArrayLi ...

  5. linux设置别名

    1.查看别名: alias 2.临时设置别名 alias show='ls -al' 3.永久生效 vi 家目录/.bashrc alias mmm='mysql -uroot -p' 4.删除别名 ...

  6. 朝圣Java(问题集锦)之:The Apache Tomcat installation at this directory is version 8.5.32. A Tomcat 8.0 inst

    最近开始学Java了.有C#底子,但是学起来Java还是很吃力,感觉别人架好了各种包,自己只要调用就行了,结果还有各种bug出现.掩面中. 启动Tomcat的时候,报错The Apache Tomca ...

  7. 解决VS2010在新建实体数据模型出现“在 .NET Framework Data Provider for Microsoft SQL Server Compact 3.5 中发生错误。请与提供程序供应商联系以解决此问题。”的问题

    最近想试着学习ASP.NET MVC,在点击 添加--新建项--Visual C#下的数据中的ADO.NET 实体数据模型,到"选择您的数据连接"时,出现错误,"在 .N ...

  8. Java内存区域和对象的创建

    文章绝大部分内存摘抄自<深入理解Java虚拟机>,结合了小部分个人理解如果有什么错误,还望指出,如果涉及到侵权,联系博主,立马删除,再次感谢<深入理解Java虚拟机>的作者-周 ...

  9. 多文件上传demo

    @ApiOperation(value = "批量上传", notes = "批量上传", httpMethod = "POST") @Po ...

  10. css之表格,表单

    一.表格 1.定义 表格由<table>标签来定义.每个表格均有若干行(由tr标签定义),每行被分割为若个单元格(由td标签定义).字母td指表格数据(table data),即数据单元格 ...