关闭

ViewPager中切换及滑动切换Fragment数据保存状态讲解

标签: viewpager性能优化保存数据
4561人阅读 评论(2) 收藏 举报
分类:

最近工作中遇到了一个很棘手的问题,就是Viewpager中加载Fragment后,来回切换都会重新加载一遍数据,很浪费流量;查找了一些资料,总结一下主要就是FragmentPagerAdapter会把没一个生成的Fragment都保存在内存中,因此比较适用于页面相对静态,页面比较少的情况;像拥有大量页面经常会变的页面时候,就不必要占用大量的内存。

讲ViewPager中的Fragment的生命周期打印一遍,发现:

FragmentPagerAdapter时,根据viewPager的创建习惯,一般会创建左中右三个页面。第一次会调用页面的onAttach()、onCreate()、onCreateView()、onActivityCreated()、onStart()、onResume().并且第一次创建每个Fragment的时候会调用getItem()方法,之后便不会再调用这个方法了。之后再对ViewPager进行滑动的时候,比如从3号页面滑动到2号页面时,分别调用的方法为:4号Fragment的onPause()、onStop()、onDestoryView()方法以及 1号Fragment的onCreateView()、onActivityCreated()、onStart()、onResume()的方法。到这里就应该明白了为什么即使使用了这个FragmentPagerAdapter也不能保存原来的状态的原因了。因为我的初始化布局是在onCreateView(),逻辑处理是在onActivityCreated()中开始调用的,所以滑动过后会再次初始化。

对比看了一下用FragmentStatePagerAdapter来做适配器时,所调用的方法第一次和FragmentPagerAdapter中创建fragment调用的方法一样,也会调用onAttach()、onCreate()、onCreateView()、onActivityCreated()、onStart()、onResume()等方法。但是与FragmentPagerAdapter不同的是,getItem几乎每次都会调用,并且在滑动过程中,比如,从2号Fragment滑动到3号Fragment时,分别调用的方法为:1号Fragment的onPause()、onStop()、onDestoryView()、onDestory()、onDetach()的方法,以及4号Fragment的onAttach()、onCreate()、onCreateView()、onActivityCreated()、onStart()、onResume()方法。


所以为了能实现ViewPager保存Fragment的状态,方法:

为我项目中部分代码

mAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {
            @Override
            public Fragment getItem(int position) {
                Fragment fragment = null;
                fragment = mTabContents.get(position);
                Bundle bundle = new Bundle();
                bundle.putString("id",""+position);
                fragment.setArguments(bundle);
                return fragment;
            }

            @Override
            public int getCount() {
                return mTabContents.size();
            }

            @Override
            public Object instantiateItem(ViewGroup container, int position) {
                Fragment fragment = (Fragment)super.instantiateItem(container,position);
                getSupportFragmentManager().beginTransaction().show(fragment).commit();
                return fragment;
            }

            @Override
            public void destroyItem(ViewGroup container, int position, Object object) {
//                super.destroyItem(container, position, object);
                Fragment fragment = mTabContents.get(position);
                getSupportFragmentManager().beginTransaction().hide(fragment).commit();
            }
        };


1
1
查看评论

viewpager + fragmentpageradapter 切换fragment产生的问题

在使用viewpager+fragmentpageradapter ,起始fragment为A  切换到相邻的fragmentB  然后再切换到A,发现A中fragment内容是fragmentB的内容,这一问题我很困惑。正如你所知道,切换fragment时,会先从fragmen...
  • h183288132
  • h183288132
  • 2015-09-25 16:57
  • 1196

Android之ViewPager+Fragment实现页面点击切换和手势滑动

使用ViewPager+Fragment实现页面点击切换和手势滑动,效果图如下: 源码下载地址: http://download.csdn.net/detail/wei_zhi/9422590 布局文件activity_main.xml如下:<?xml version="1.0...
  • wei_zhi
  • wei_zhi
  • 2016-01-29 20:17
  • 12187

ViewPager+Fragment实现选项卡,并且完美解决刷新和替换Fragment的问题

本文完美解决了ViewPager中Fragment刷新问题,并且以一个小Demo演示了选项卡和刷新功能。
  • u013005791
  • u013005791
  • 2015-11-27 14:54
  • 6756

Android ViewPager+Fragment切换显示不出的问题

今天遇到一个问题,之前也有遇到过,但是没有做笔记,时间一久也就忘了,这次项目又遇到了这个问题,却没有想起之前的解决方法,所以把他写到博客记录一下,以便不再犯同样的错误,android基础学得不是很扎实,问题很简单,不要见怪啊。好了,废话少说,下面说正题。我们在使用ViewPager+Fragment...
  • jiang547860818
  • jiang547860818
  • 2016-11-10 20:21
  • 3338

ViewPager+Fragment打造滑动切换界面

最近项目有个功能需要用到滑动切换,并且导航条也要有动画,所以现在网上找了一些素材写了一个demo,素材不搭,感觉很影响整体效果,所以请无视素材。先看效果吧 布局内容<RelativeLayout xmlns:android="http://schemas.android.c...
  • oMrApollo
  • oMrApollo
  • 2015-12-25 15:23
  • 2874

FragmentPagerAdapter与FragmentStatePagerAdapter的区别+ViewPager数据刷新问题详解

FragmentPagerAdapter与FragmentStatePagerAdapter 的区别 区别FragmentPagerAdapter每一个Fragment都会被保存在fragment manager中 每一个用户访问过的Fragment都会被保存在内存中,在销毁时,只会销毁其视图层...
  • weixin_36723200
  • weixin_36723200
  • 2017-01-16 15:34
  • 376

解决fragment+viewpager第二次进入的时候没有数据的问题

问题描述: 我的项目类似新浪新闻,侧边栏有几个item,每个item对应一个fragment。其中有一个item A对应的JobFragment 中有viewpager,然后viewpager中又有4个fragment。 选中JobFragment时,首先初始化界面,这时候没有数据,然后界面初始...
  • zmldlut
  • zmldlut
  • 2013-12-30 20:43
  • 14721

FragmentPagerAdapter与FragmentStatePagerAdapter使用详解与区别

今天搞ViewPage滑动Fragment,一滑动再一回来就重建。。。找了半天,以为生命周期搞错了,后来发现用的Adaper是FragmentStatePagerAdapter。。。 正好整理一下这方面的知识点。 FragmentPagerAdapter是android-support-v4支持...
  • lvwenbo0107
  • lvwenbo0107
  • 2016-08-03 17:00
  • 964

解决fragment+viewpager第二次进入的时候没有数据的问题

为什么调用 FragmentPagerAdapter.notifyDataSetChanged() 并不能更新其 Fragment? 在一个 Android 应用中,我使用 FragmentPagerAdapter 来处理多 Fragment 页面的横向滑动...
  • henry121212
  • henry121212
  • 2014-04-12 01:45
  • 17180

关于Viewpager中的Fragment 滑动时保存状态的问题

之前遇到了在ViewPager中使用Fragment的情况,结果遇到了一个问题就是当viewPager划过去,再滑动回来后之前的fragment又回到了初始化的状态。所以就研究了一下。网上搜了一下,大部分都是说这个FragmentPagerAdapter和FragmentStatePagerAdap...
  • guo807015563
  • guo807015563
  • 2014-12-22 17:04
  • 6345
    个人资料
    • 访问:64817次
    • 积分:1551
    • 等级:
    • 排名:千里之外
    • 原创:64篇
    • 转载:229篇
    • 译文:0篇
    • 评论:5条