ViewPager+Fragment+Tab延迟加载页面(懒加载)

ViewPager里面滑动页面时,我们希望要滑到的页面不要立即显示,要等到我们来到这一页后再显示loading,然后刷出数据(也叫懒加载)。上代码:

public abstract class LazyLoadFragment extends Fragment {
    private boolean mHasLoadedOnce;
    private boolean mViewCreated;

    protected abstract void doLoad();

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        mViewCreated = true;
        loadIfNeeded();
    }

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        loadIfNeeded();
    }

    private void loadIfNeeded() {
        if (getUserVisibleHint() && mViewCreated && !mHasLoadedOnce) {
            doLoad();
            mHasLoadedOnce = true;
        }
    }
}

setUserVisibleHint()这个核心方法会在ViewPager的populate()里面被调用, 当其传人的参数isVisibleToUser为true时,表示对用户可见,此时再去联网取数据,就有延迟加载的效果。但这个方法会在onCreateView()之前被调用,在setUserVisibleHint()里面也要检测是否view已经创建、是否已加载过数据。

还有一点,我们要调用"ViewPager.setOffscreenPageLimit(4)"使不可见的页面也一直存活。这个做法比较耗内存,目前还没有找到更好的方法。


最后,贴出完整示例代码的下载地址:

http://download.csdn.net/download/tedzyc/8852745

你可能感兴趣的:(viewpager,Fragment,懒加载)