用过ViewPage+Fragment组合的童鞋自然知道这个问题,没有遇到的同学祝愿你们永远不会遇到,呵呵。直接上关键代码
注释:setUserVisibleHint每次fragment显示与隐藏都会调用,他的调用顺序由于onCreate,所以需要一些常量进行判断
private boolean mHasLoadedOnce = false; @Override public void setUserVisibleHint(boolean isVisibleToUser) { if (this.isVisible()) { // we check that the fragment is becoming visible if (isVisibleToUser && !mHasLoadedOnce && mArrayList==null) { // async http request here mHasLoadedOnce = true; } } super.setUserVisibleHint(isVisibleToUser); }
由于setUserVisibleHint优于onCreate调用,所以当onCreate调用完毕setUserVisibleHint就不会触发,这时需要在首个显示的fragment调用setUserVisibleHint方法
@Override public void onActivityCreated(Bundle savedInstanceState) { // TODO Auto-generated method stub setUserVisibleHint(true); super.onActivityCreated(savedInstanceState); }
这个是设置viewpager保留多少个显示界面
pager.setOffscreenPageLimit(3);