首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android Fragment懒加载新思路

在Android x以前,我们实现懒加载通常是通过 setUserVisibleHint 方法来控制Fragment是否可见。在Android x之后,Google 提供了新的方案给我们。... * * @param fragment the fragment to have it's state capped....现在我们来看一下 懒加载 的新方案: 我们先查看一下 FragmentPagerAdapter 类: 新增了一个参数,这个参数用来控制选用哪种模式,现在提供了两种模式,如下: 其中,默认使用的是 BEHAVIOR_SET_USER_VISIBLE_HINT...有了这个特性,我们来试试新的懒加载方案: demo也很简单,只需要new FragmentAdapter时,传入BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT即可。...测试demo:ViewPager-Fragment1-Fragment2 打开Activity时: 当切换到第二个Fragment时: 可以观察到每次都会执行onResume,所以我们可以将我们的数据加载方法放在

60340
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    android ViewPager+Fragment之懒加载

    说说写这篇博客的背景吧,前两天去面试,问到一个问题说的是:比如我们首页,是有3个fragment构成的,并且要是实现作用可以滑,那么这个最好的选择就是ViewPager+fragment了,但是我们知道...ViewPager+fragment是做预加载的,然而这种方法有一个坏处,当前页面和预加载页面都有大量的网络请求,可能就会比较慢,这样就会造成不好打体验。...其实我们忽略的一个问题,Android的fragment里面已经帮我们提供了一个方法setUserVisibleHint。setUserVisibleHint()来显示与隐藏Fragment的。...已经初始化完毕,如果网络数据未加载,那么请求数据,或者需要强制刷新页面,那么再去请求页面数据,这样就达到了本文开始需要的要求。...", title); fragment.setArguments(args); return fragment; } private String title

    89880

    android Fragment单页面加载,避免重复加载(懒加载)分析

    上面两个页面都是 ViewPager + Fragment实现,Viewpager + Fragment情况下,fragment的生命周期因Viewpager的缓存机制而失去了具体意义 目前问题:每次进入...4个Fragment的生命周期都会走一遍,数据同时请求,这就会造成UI初始化较慢 需求:每次进入只加载当前看到界面数据、切换时请求当前选项卡数据、重复切换只加载一次 具体实现原理: 使用Fragment...但是直接根据isVisible判断就加载数据,可能onCreateView()方法并未执行完毕,此时就会出现NullPointerException空指针异常。...所以就需要满足控件初始化完成,用户可见,才能加载数据。...onFragmentVisibleChange(boolean isVisible) { } @Override protected void onFragmentFirstVisible() { //这里面写请求数据的方法

    1.4K10

    【Android】Fragment懒加载和ViewPager的坑

    效果图 ANDROID和福利两个Fragment是设置的Fragment可见时加载数据,也就是懒加载。...懒加载 懒加载意思也就是当需要的时候才会去加载 那么,为什么Fragment需要懒加载呢,一般我们都会在onCreate()或者onCreateView()里去启动一些数据加载操作,比如从本地加载或者从服务器加载...如果加载数据的操作都比较耗时或者都是类似图片的占用大量内存,这时就应该考虑想想是否该实现懒加载。也就是,当我打开哪个Fragment的时候,它才会去加载数据。 懒加载实现?...可以是可以,如果你只是需要数据的懒加载的话,但如果你还有以下的需求,那么这种方式就不行了: 1、如果你在Fragment可见时需要进行一些控件的操作,比如显示加载控件 2、如果你还需要在Fragment...代码 ---- 2016-04-21 更新:该博客封装的懒加载实现有些不足,比如不支持数据只有第一次打开Fragment时才进行加载的应用场景,因此重新写了篇博客,可以移步至此观看:再来一篇Fragment

    2K20

    懒加载(Lazy Loading) – MyBatis懒加载 – Spring懒加载

    文章目录 懒加载(Lazy Loading) MyBatis中懒加载的使用 Spring中懒加载的使用 懒加载(Lazy Loading) 懒加载也叫“延迟价值”,核心思想是把对象的实例化延迟到真正调用该对象的时候...特别是在web应用程序中,它能够在用户滚动页面的时候自动获取更多的数据,而新得到的数据不会影响原有数据的显示,同时最大程度上减少服务器端的资源耗用。...> 在使用的时候(在映射文件XxxMapper.xml中使用),通过在所需要懒加载的resultMap 的列上加上 fetchType="lazy" ,表明这个数据是懒加载实现的...-- fetchType="lazy" 懒加载实现数据加载--> 懒加载实现数据加载--> <collection property="productList" fetchType="lazy" ofType="com.xgf.mybatis.correlation.many_to_many.bean.Product

    2K20

    【Android】再来一篇Fragment的懒加载(只加载一次哦)

    Fragment懒加载 如果想直接看代码,直接跳到最下面的代码部分和使用介绍即可,如果感兴趣,可以慢慢往下看看我的唠叨。...之前写过一篇 Fragment懒加载和ViewPager的坑,里面分析了 Fragment 结合 ViewPager 使用时会碰到的一些情况,以及为什么要用懒加载,如何用,感兴趣的也可以再回去看看。...后来发现,我在那篇博客里封装的 Fragment 基类不足以满足大家的懒加载需求,所以决定重新来封装一次,这次封装的支持以下的功能: 1.支持数据的懒加载并且只加载一次 2.提供 Fragment 可见与不可见时回调...稍微讲解一下,有些时候,我们打开一个 Fragment 页面时,希望它是在可见时才去加载数据,也就是不要在后台就开始加载数据,而且,我们也希望加载数据的操作只是第一次打开该 Fragment 时才进行的操作...除了懒加载,只加载一次的需求外,可能我们还需要每次 Fragment 的打开或关闭时显示数据加载进度。

    1.6K70

    关于懒加载数据的获取

    需求是:想要在页面中拿到懒加载的数据和图片, 就需要通过scroll滚动来模拟用户的操作 来把一些懒加载的数据 真正的加载出来, 最后去拿数据就可以了, 最后拿到数据后,需要自动回到顶部 难点1:懒加载的数据...,没有加载的情况下 盒子的高度是没有撑开的,也就是说我们滚动的距离没法确认 难点2:懒加载的时候 不确定 啥时候能确定懒加载的数据加载完了?...需要某种机制来默认判断 需求明确了之后,思路: 页面加载进来之后,先把scroll的滚定值调为999999 然后监听window的scroll事件, 这里有一个技巧, 当没有滚动空间的时候, scroll...的滚动事件即为无效滚动, 然后在我们的window的scroll事件当中 写一个防抖, 当超过1、2秒时间的无限滚动时, 就视为没有更多懒加载的数据了, 此时回到顶部,并移除window的scroll事件

    52010

    vue路由懒加载及组件懒加载

    一、为什么要使用路由懒加载 为给客户更好的客户体验,首屏组件加载速度更快一些,解决白屏问题。 二、定义 懒加载简单来说就是延迟加载或按需加载,即在需要的时候的时候进行加载。...三、使用 常用的懒加载方式有两种:即使用vue异步组件 和 ES中的import 1、未用懒加载,vue中路由代码如下           import Vue from 'vue' ​...​ path: '/', ​ name: 'HelloWorld', ​ component:HelloWorld ​ } ​ ] ​ }) 四、组件懒加载...相同与路由懒加载, 1、原来组件中写法 ​ ​ ​ 1111 ​ ​...: 1、vue异步组件实现路由懒加载 component:resolve=>(['需要加载的路由的地址',resolve]) 2、es提出的import(推荐使用这种方式) const HelloWorld

    1.6K30

    图片懒加载

    图片懒加载 场景 一个网页会包含很多的图片,例如淘宝京东这些购物网站,商品图片很多,如果在首页就全部加载的话,会影响渲染速度(比如出现白屏)和浪费带宽,为了解决以上问题,提高用户体验,就出现了懒加载方式来减轻服务器的压力...,优先加载可视区域的内容,其他部分等进入了可视区域再加载,从而提高性能。...原理 一张图片就是一个img标签,浏览器是否发起请求图片是根据img的src属性,所以实现懒加载的关键就是,在图片没有进入可视区域时,先不给img的src赋值,这样浏览器就不会发送请求了,等到图片进入可视区域再给...实现 加载loading图片进行占位 判断哪些图片要加载 将loading图片替换真图片 <img src="....}, interval); } }) } } // 懒加载

    2.4K20

    mybatis 延迟加载(懒加载)

    因为只有在用户需要的时候再去查询数据库,可以大大提高数据库性能 2.什么是延迟加载? 就是在需要用到数据时才进行加载,不需要用到数据时就不加载数据。 3.延迟加载实现思路?...(一对一,一对多) 数据库关系,一个账户对应一个用户,一个用户对应多个账户,如下 ?...现在已经学会配置延迟加载了,明白什么是延迟加载了嘛?...不不明白,再看看下面的测试你可能就知道了, 什么是用到的时候去查数据库了,懒加载(延迟加载)的精髓 延迟加载效果 测试1 public class Account implements Serializable...当遍历到user的时候,框架会通过account类的id开始去查询user,并完成封装 ,这就是懒加载

    2.1K30

    bean懒加载

    下面就是深入源码探究,会分析以下三种情况: bean A没有引用任何其他bean,且配置成懒加载 bean A引用了bean B,且bean A配置成懒加载 bean A引用了bean B,bean A...没有配置为懒加载,bean B配置为懒加载 首先代码入口还是 AbstractApplicationContext#refresh方法,其中在 AbstractApplicationContext#finishBeanFactoryInitialization...bd.isLazyInit(),会判断bean是否为抽象类、单例、懒加载,如果不符合就不会执行if里的代码,其实第一、二中情况都不符合的,所以不会执行到if语句里的代码.关键是第三种情况,分析思路之前这篇...也就是在创建bean A的时候,在实例化其属性时,会创建bean B,有兴趣的朋友可以打断点调试,以下总结: bean配置lazy-init="true"时,在容器初始化时不会创建该bean 若一为单例且非懒加载的...bean A引用了懒加载bean B时,在bean A被创建时,会创建bean B 非单例或为抽象类或配置lazy-init="true"的bean,都不会在容器初始化时创建bean

    78330

    Android - 懒加载

    今天我们来聊一聊ViewPager+Fragment的懒加载。 1.什么是懒加载,为什么要用懒加载?...预加载功能会暴露一个问题,比如我刚进入加载首页的数据,但是因为有预加载功能,那么就会执行下一个Tab对应的Fragmeng的生命周期,如果我下一个Tab页数据量小还好,如果我有比较耗时的操作或者网络请求...2.懒加载解决方式 2.1 尝试设置setOffscreenPageLimit(失败) 之前想既然setOffscreenPageLimit可以设置,那我就将其设置为0,结果“然并卵”,查看源码如下:...image.png 也就是你设置的setOffscreenPageLimit要大于1才可以生效 2.2 试试懒加载 我们先来看看我们的页面: ?...懒加载进阶 我们上面说的是一层的ViewPager加Fragment,但大家也一定遇到过Fragemgt中又来了一层ViewPager+Fragment,如图: ? 那这种的怎么办呢?

    1.2K20
    领券