android 中的 ViewPager+ Fragment
android的Viewpager 的各种经常的用法,朋友问我要过,所以就稍微总结一下,
ViewPager + Fragment 经常用到 代码是从 actionbarsherlock 中提取出来的,这个效果都知道是 滑动来切换的。直接上代码了
在这里简单说明一下 FragmentStatePagerAdapter 和 FragmentPagerAdapter
2个adapter
第一种 fragment状态adapter - 在当前只会存在 前1个fragment 当前 fragment 和 下1个 fragment 其他销毁 ,适合加载多数据
第二种 FragmentPagerAdapter - 全部存在,所以不太适合加载 大量的数据 如图片什么的,很容易内存溢出。
工程结构:
1. activity adapter 在一起 (static类型的 Fragment)
- public class ViewPageFragment extends FragmentActivity {
- //这个是有多少个 fragment页面
- static final int NUM_ITEMS = 5;
- private MyAdapter mAdapter;
- private ViewPager mPager;
- private int nowPage;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.pagers_fragment_main);
- mAdapter = new MyAdapter(getSupportFragmentManager() );
- mPager = (ViewPager)findViewById(R.id.mypagers_pager);
- mPager.setAdapter(mAdapter);
- }
- /**
- * 有状态的 ,只会有前3个存在 其他销毁, 前1个, 中间, 下一个
- */
- public static class MyAdapter extends FragmentStatePagerAdapter {
- public MyAdapter(FragmentManager fm) {
- super(fm);
- }
- @Override
- public int getCount() {
- return NUM_ITEMS;
- }
- //得到每个item
- @Override
- public Fragment getItem(int position) {
- return ArrayFragment.newInstance(position);
- }
- // 初始化每个页卡选项
- @Override
- public Object instantiateItem(ViewGroup arg0, int arg1) {
- // TODO Auto-generated method stub
- return super.instantiateItem(arg0, arg1);
- }
- @Override
- public void destroyItem(ViewGroup container, int position, Object object) {
- System.out.println( "position Destory" + position);
- super.destroyItem(container, position, object);
- }
- }
- /**
- * 无状态的 会全部加载着, 这个适合少量的 特别多的图片啊啥的 还是用 FragmentStatePagerAdapter
- * @author lilei
- */
- // public static class MyAdapter extends FragmentPagerAdapter {
- // public MyAdapter(FragmentManager fm ) {
- // super(fm);
- //
- // }
- //
- // @Override
- // public int getCount() {
- // return NUM_ITEMS;
- // }
- //
- // @Override
- // public Fragment getItem(int position) {
- // // 返回相应的 fragment
- // return ArrayFragment.newInstance(position);
- // }
- //
- // @Override
- // public void destroyItem(ViewGroup container, int position, Object object) {
- // System.out.println( "position Destory" + position);
- // super.destroyItem(container, position, object);
- // }
- // }
- /**
- * 所有的 每个Fragment
- */
- public static class ArrayFragment extends Fragment {
- int mNum;
- static ArrayFragment newInstance(int num) {
- ArrayFragment array= new ArrayFragment();
- Bundle args = new Bundle();
- args.putInt("num", num);
- array.setArguments(args);
- return array;
- }
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- mNum = getArguments() != null ? getArguments().getInt("num") : 1;
- System.out.println("mNum Fragment create ="+ mNum);
- }
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- System.out.println("onCreateView = ");
- //在这里加载每个 fragment的显示的 View
- View v = null;
- if(mNum == 0){
- v = inflater.inflate(R.layout.pagers_fragment1, container, false);
- ((TextView)v.findViewById(R.id.textView1)).setText(mNum+ "= mNum");
- }else if(mNum == 1){
- v = inflater.inflate(R.layout.pagers_fragment1, container, false);
- ((TextView)v.findViewById(R.id.textView1)).setText(mNum+ "= mNum");
- }else if(mNum == 2){
- v = inflater.inflate(R.layout.pagers_fragment1, container, false);
- ((TextView)v.findViewById(R.id.textView1)).setText(mNum+ "= mNum");
- }else{
- v = inflater.inflate(R.layout.pagers_fragment1, container, false);
- ((TextView)v.findViewById(R.id.textView1)).setText(mNum+ "= mNum");
- }
- return v;
- }
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- System.out.println("onActivityCreated = ");
- super.onActivityCreated(savedInstanceState);
- }
- @Override
- public void onDestroyView(){
- System.out.println(mNum + "mNumDestory");
- super.onDestroyView();
- }
- @Override
- public void onDestroy(){
- super.onDestroy();
- }
- }
- }
2. 和 1也没什么太大区别( 个中用处 看个人了 )
- public class ViewPageFragmentCS extends FragmentActivity {
- //这个是有多少个 fragment页面
- private MyAdapter mAdapter;
- private ViewPager mPager;
- private List<Entity> list = new ArrayList<ViewPageFragmentCS.Entity>();;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.pagers_fragment_main);
- for (int i = 0; i < 7 ; i++) {
- Entity ee = new Entity();
- ee.name = "ll"+ i;
- ee.age = ""+ i;
- list.add(ee);
- }
- mAdapter = new MyAdapter(getSupportFragmentManager(),list);
- mPager = (ViewPager)findViewById(R.id.mypagers_pager);
- mPager.setAdapter(mAdapter);
- }
- private class Entity{
- public String name;
- public String age;
- }
- // 在这里你可以传 list<Fragment> 也可以传递 list<Object>数据
- public class MyAdapter extends FragmentStatePagerAdapter {
- List<Entity> list_ee;
- public MyAdapter(FragmentManager fm, List<Entity> ee) {
- super(fm);
- this.list_ee = ee ;
- }
- @Override
- public int getCount() {
- return list_ee.size();
- }
- // 初始化每个页卡选项
- @Override
- public Object instantiateItem(ViewGroup arg0, int position) {
- ArrayFragment ff = (ArrayFragment)super.instantiateItem(arg0, position);
- ff.setThings(list_ee.get(position),position);
- return ff;
- }
- @Override
- public void destroyItem(ViewGroup container, int position, Object object) {
- System.out.println( "position Destory" + position);
- super.destroyItem(container, position, object);
- }
- @Override
- public Fragment getItem(int arg0) {
- // TODO Auto-generated method stub
- return new ArrayFragment();
- }
- }
- /**
- * 所有的 每个Fragment
- */
- public class ArrayFragment extends Fragment {
- private Entity ee;
- private int position;
- public void setThings(Entity ee,int position){
- this.ee =ee ;
- this.position = position;
- }
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- }
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- System.out.println("onCreateView = ");
- //在这里加载每个 fragment的显示的 View
- View v = inflater.inflate(R.layout.pagers_fragment1, container, false);
- ((TextView)v.findViewById(R.id.textView1)).setText(ee.name+ "= ee.Name -=age"+ ee.age);
- return v;
- }
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- System.out.println("onActivityCreated = ");
- super.onActivityCreated(savedInstanceState);
- }
- @Override
- public void onDestroyView(){
- System.out.println("onDestroyView = "+ position);
- super.onDestroyView();
- }
- @Override
- public void onDestroy(){
- System.out.println("onDestroy = "+ position);
- super.onDestroy();
- }
- }
- }
直接复制过去就可以看效果了 别忘记 V4包,xml 布局文件 自己随便整个吧。
滑动到第3个页面的时候可以看到 第1个页面销毁 第4个生成, 当前存在 2 3 4
android 中的 ViewPager+ Fragment的更多相关文章
- Android 中 DrawerLayout + ViewPager 怎么解决滑动冲突?
DrawerLayout 是 Android 官方的侧滑菜单控件,而 ViewPager 相信大家都很熟悉了.今天这里就讲一下当在 DrawerLayout 中嵌套 ViewPager 时,要如何解决 ...
- Android中FragmentPagerAdapter对Fragment的缓存(一)
ViewPager + FragmentPagerAdapter,时我们经常使用的一对搭档,其实际应用的代码也非常简单,但是也有一些容易被忽略的地方,这次我们就来讨论下FragmentPagerAda ...
- Android中使用ViewPager实现屏幕页面切换和页面切换效果
之前关于如何实现屏幕页面切换,写过一篇博文<Android中使用ViewFlipper实现屏幕切换>,相比ViewFlipper,ViewPager更适用复杂的视图切换,而且Viewpag ...
- Android中FragmentPagerAdapter对Fragment的缓存(二)
上一篇我们谈到了,当应用程序恢复时,由于FragmentPagerAdapter对Fragment进行了缓存的读取,导致其并未使用在Activity中新创建的Fragment实例.今天我们来看如何解决 ...
- Android中使用ViewPager实现广告条
我们在使用电商或视频的手机客户端时,通常会看到广告条的效果.在网上搜索时才知道使用的是ViewPager,于是自己也做了一个Demo. 以下是效果图: 图中包括背景图片.文字描述以及白点. 其中Vie ...
- 【Android 应用开发】Android中使用ViewPager制作广告栏效果 - 解决ViewPager占满全屏页面适配问题
. 参考界面 : 携程app首页的广告栏, 使用ViewPager实现 自制页面效果图 : 源码下载地址: http://download.csdn.net/detail/han1202 ...
- Android Studio 使用ViewPager + Fragment实现滑动菜单Tab效果 --简易版
描述: 之前有做过一个记账本APP,拿来练手的,做的很简单,是用Eclipse开发的: 最近想把这个APP重新完善一下,添加了一些新的功能,并选用Android Studio来开发: APP已经完善了 ...
- Android中使用ViewPager制作广告栏效果 - 解决ViewPager占满全屏页面适配问题
. 参考界面 : 携程app首页的广告栏, 使用ViewPager实现 自制页面效果图 : 源码下载地址: http://download.csdn.net/detail/han1202 ...
- Android中Activity加入Fragment使用注意事项及常用技巧
Fragment中AlertDialog弹出窗口的使用 Fragment默认不具有Content的一些方法和属性,因此在Activity中可以使用的一些方法在Fragment中使用就需要一些小技巧了 ...
随机推荐
- .NET连接SAP系统专题:.NET调用RFC几种方式(一)
本来今天是要写一篇关于NCO3.0的东西,就是关乎.NET调用SAP的RFC的,支持VS2010和.NET 4.0等.现在网上到处都是充斥着NCO1.X和NCO2.0,需要用VS2003来使用,都是一 ...
- Python 3 学习笔记
教程地址: http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143161198 ...
- C++ 变量的声明与定义的区别
变量声明和定义的区别 我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下:(望我的指点 ...
- [LeetCode]题解(python):003-Longest Substring Without Repeating Characters
题目来源: https://leetcode.com/problems/longest-substring-without-repeating-characters/ 题意分析: 题目是要求出最长的不 ...
- 用CSS样式画横线和竖线的方法
今天在做网页的时候,需要用到CSS画横线,虽然比较简单,但也出了一些小问题,拿来做个备忘. 方法一:用DIV,代码如下:(推荐此方法) <div style="width:80 ...
- win7 资源管理器的背景色修改
主要参考 http://blog.sina.com.cn/s/blog_49c182c20100w3nb.html win7 通过dll修改背景色首先找到这个文件C:\Windows\Resource ...
- 安装VMware vSphere 的目的就是在一台物理服务器上安装很多很多的虚拟机
版权声明:本文为博主原创文章,未经博主允许不得转载. 我们安装VMware vSphere 的目的就是在一台物理服务器上安装很多很多的虚拟机,我们可以通过VMware vSphere Client直接 ...
- 帝国cms修改[!--show.listpage--]分页页码所生成的html标签
在使用帝国cms系统时,我们用[!--show.page--]和[!--show.listpage--]来生成页码 其中[!--show.listpage--]所生成的html页码代码为: <a ...
- Java并发编程总结3——AQS、ReentrantLock、ReentrantReadWriteLock(转)
本文内容主要总结自<Java并发编程的艺术>第5章——Java中的锁. 一.AQS AbstractQueuedSynchronizer(简称AQS),队列同步器,是用来构建锁或者其他同步 ...
- 基于Visual C++2013拆解世界五百强面试题--题18-程序结果分析2-终结篇
第二部分程序结果分析,分析流程还是写入代码注释中 分析下面程序的输出: #include <stdio.h> int main() { char *a = "hello" ...