Fragment的懒加载 setuservisiblehint

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);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容