ViewPager+Fragment滑动界面,并做延迟加载【终极解决】

我们在做应用的过程中,ViewPager+Fragment是很常见的,但是如果在每次应用启动的时候就去加载大量的网络数据肯定是不好的,我们往往需要的是只加载布局暂时不加载数据,事先把布局加载好,滑动的时候会流畅些,这样用户体验也好.

Fragment虽然有onResume和onPause的,但是这两个方法是Activity的方法,调用时机也是与Activity相同,和ViewPager搭配使用这个方法就很鸡肋了,根本不是你想要的效果,这里介绍一种方法。

下面就是解决办法:

事先解释下:setUserVisibleHint每次fragment显示与隐藏都会调用,他的调用顺序优先于onCreate

private boolean mHasLoadedOnce = false;

    @Override  
    public void onResume() {  
        super.onResume();  
        // 因为setUserVisibleHint每次fragment显示与隐藏都会调用,他的调用顺序优先于onCreate
        // 这里是为了解决ViewPager中第一个显示的Fragment不加载数据的问题
        // 还有另外一个原因就是万一内存被回收了 这里还是可以重新加载的
        if (getUserVisibleHint()) {  
            showData();  
        }  
    }  

    @Override  
    public void setUserVisibleHint(boolean isVisibleToUser) {  
        super.setUserVisibleHint(isVisibleToUser);  
        if (isVisibleToUser) {  //相当于Fragment的onResume 
             showData();  
        } else {  //相当于Fragment的onPause 

        } 
    }  
    /** * 初始化数据 * @author yubin * @date 2014-1-16 */  
    private void showData() {  
        if(view!=null && !mHasLoadedOnce && model==null){
             // 在这里加载各种数据 
            mHasLoadedOnce = true;//加载数据完成 
        }
    }  

由于我的数据是保存在model里面的 所以我这里判断会多一些;
我这里测试没有问题,如果你们有问题,请及时在下面留言哈~~

你可能感兴趣的:(viewpager)