在特定场景不需要ViewPager对数据预加载,而他的setOffscreenPageLimit(i)中i默认为1,只能传比1大或等于的参数,那么如何禁止预加载呢?网上有两种教程:参考下面
http://www.cnblogs.com/flyme2012/p/4175510.html
后来我用了第二种方法:直接copy上下面的代码进去项目中就可以禁止ViewPager预加载了
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
//判断Fragment中的ListView时候存在,判断该Fragment时候已经正在前台显示 通过这两个判断,就可以知道什么时候去加载数据了
if (isVisibleToUser && isVisible() && mPullToRefreshGridView.getVisibility() != View.VISIBLE) {
initData(); //加载数据的方法
}
super.setUserVisibleHint(isVisibleToUser);
}
这个方法会在切换到Fragment显示的时候去调用。
为了保证一开始加载Fragment的时候该方法提前调用,导致的数据不会加载,我在代码中做出了如下的判断:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
if (getUserVisibleHint() && mPullToRefreshGridView.getVisibility() != View.VISIBLE) {
initData();
}
super.onActivityCreated(savedInstanceState);
}
特别注意:
1.在刚开始加载Fragment的时候,setUserVisibleHint这个方法比onCreated方法执行的还要早。预加载的Fragment就不会执行这个方法。
2.在VIewPager 切换到某个Fragment的时候,还会调用该方法。
网友评论