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中使用就需要一些小技巧了 ...
随机推荐
- spark学习
大数据学习纲要,主要针对spark的相关知识的学习,后续会涉及其他大数据相关框架及语言. 1 spark入门: 2.spark 实战部分 3.spark源码解析
- 寻找数列中第k大的数算法分析
问题描述:给定一系列数{a1,a2,...,an},这些数无序的,现在求第k大的数. 看到这个问题,首先想到的是先排序,然后直接输出第k大的数,于是得到啦基于排序的算法 算法一: #include&l ...
- 采用translate实现垂直水平居中
今天分享一个利用css3新特性实现垂直水平居中的方法. 通过对元素进行绝对定位再配合transform中的translate实现. 代码如下: html <div id="conten ...
- Symfony框架系列----1.入门安装
一.安装 (1)Composer安装(可选) $ curl -s https://getcomposer.org/installer | php $ php composer.phar crea ...
- C#数据库——用多线程来组合一个SQL语句
StringBuffer sql = new StringBuffer();或(StringBuilder sql = new StringBuilder ()) sql.Append("s ...
- 射频识别技术漫谈(23)——ISO15693的载波、调制与编码
射频识别技术中的通讯大多是主从式,主动方一般是读写器,被动方称为“卡片”或“标签”.到底是叫“卡片”还是“标签”,好像也没有严格的区分.习惯上可以从以下4个方面界定:一是形状,卡片通常体积较大,更像“ ...
- 用Jetty和redis实现接入服务器adapter
传统的服务器端为若干个客户端提供服务,一般需要开启多个服务器端进程.为了进一步提升服务器端的处理能力,可以如下图所示将服务解耦为两部分(adapter与workers),它们之间通过消息队列传输数据, ...
- [python网络编程]DNSserver
在上一篇中,使用scrapy改动源IP发送请求的最后我们提到因为hosts文件不支持正则,会导致我们的随机域名DNS查询失败. 使用DNS代理服务器能够解决问题, 以下是我用gevent写的小工具.非 ...
- 经典排序算法及python实现
今天我们来谈谈几种经典排序算法,然后用python来实现,最后通过数据来比较几个算法时间 选择排序 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是每一次从待排序的数据 ...
- MySql 小问题集合
- 使用MySql通过SpringFramework来自动建表, 服务器用的是Tomcat, 在server.xml和context.xml中均正确配置了jdbc datasource. 编译通过, ...