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)"使不可见的页面也一直存活。这个做法比较耗内存,目前还没有找到更好的方法。
最后,贴出完整示例代码的下载地址: