ViewPager取消预加载并且缓存页面

来源:互联网 发布:python assert 用法 编辑:程序博客网 时间:2024/05/17 23:07

今天遇到一个问题,ViewPager+2个fragment的时候,这样就会同时访问2个页面的数据这样虽然有时很好,但是用户只需看一个Fragment时,我们就做了一些多余工作加载了第二个Fragment。在这只需要取消Fragment的预加载即可,只有当用户切换到某个Fragment才加载..,在网上看到用LazyViewPager可以 实现,但是切换的页面的时候 有重新加载,所以不行

网上查询了下资料

介绍两个方法void setUserVisibleHint(boolean isVisibleToUser)boolean getUserVisibleHint(),它们分别用作设置/获得Fragment可见状态,我们可以重写Fragment在其中做判断,代码如下:

@Overridepublic void setUserVisibleHint(boolean isVisibleToUser) {super.setUserVisibleHint(isVisibleToUser);if(<strong>isVisibleToUser</strong>&&<strong>isInit</strong>)//判断是否可见 并且是否已经初始化过,以防空指针{getData();}else {isInit=false;}}
@Overridepublic void onViewCreated(View view, @Nullable Bundle savedInstanceState) {super.onViewCreated(view, savedInstanceState);initView(view);isInit=true;//设置已经初始化}
第一次进来ViewPager会预加载 会先执行setUserVisibleHint() -----》onCreateView()-----onViewCreated()------》onResume()-----》此时isVisibleToUser=false  , isInit=false; 当执行完OnCreateView()的时候,isInit=true,而当用户切切换到这个fragment的时候 , 此时isVisibleToUser=true;并且isInit=true,成立,便会加载数据 ,加载数据完成之后 要设置isInit=true;  ,这样,当用户再次切换回来的便不会执行刷新 ,也就实现了延时加载

转载请注明出处

0 0
原创粉丝点击