1、实现不可见不加载的效果---setUserVisibleHint
在ViewPager中使用Fragment,当加载第一个Fragment的时候,会缓存左右几个页面:用户还没有看到的页面,就已经开始加载了。
在刚刚进入的时候:
再划到可见的时候:
@Override public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if(getUserVisibleHint()) {
onVisible();
} else {
onInvisible();
}
}
需要注意的是setUserVisibleHint是在onCreateView之前调用的,在视图未初始化的时候,在onVisible当中就使用的话,就会有空指针的异常。可以再onCreateView中设置一个标志位isPrepared,用于标志是否初始化完成。在初始化view之后,设置 isPrepared为true,同时调用onVisible()方法。而在onVisible()当中,判断isPrepared和isVisible只要有一个不为true就不往下执行:仅当初始化完成,并且可见的时候才继续加载,这样的避免了未初始化完成就使用而带来的问题。
参考: Andriod开发技巧——Fragment的懒加载、 实现ViewPager懒加载的三种方法
2、防止ViewPager中的Fragment被销毁---setOffscreenPageLimit
让View Pager缓存所有页面
pager.setOffscreenPageLimit(N);