Android Fragment在ViewPager中的延迟加载

当我们的app首页需要ViewPager + Fragment , 甚至Fragment中还继续嵌套ViewPager + Fragment 这样的嵌套层级时,每次首次打开App所有的Fragment都会初始化并且去网络请求数据,这就会造成每次打开时加载很慢体验极差,而且用户又不一定每一个页面都会点击去查看,用数据流量的话还会造成流量的浪费,这时我们就需要用到Fragment的延迟加载机制了,这样每次打开App时就只会加载ViewPager的第一个可见的Fragment的数据,查看其它页面时再加载数据,这样可以大大提升用户体验,好了,废话不多说了,下面进入正题。

(注:示例代码为kotlin哦)

一丶在Fragment中有一个setUserVisibleHint(isVisibleToUser: Boolean)方法,这个方法只会在当Fragment是嵌套在ViewPager中时才会调用,而且这个方法先于onCreate()方法执行,每次滑动的时候PagerAdapter也会调用这个setUserVisibleHint()方法,这个方法的参数值isVisibleToUser就是表示当前这个Fragment是否可见,有了这个就可以实现延迟加载了,首先创建一个BaseFragment然后重写如下这两个方法:

abstract class BaseFragment : Fragment() {

    // 这个标记fragment是否已加载过数据
    private var isHaveLoaded = false
    private var rootView: View? = null

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        if (rootView == null) {
            rootView = view
            // 如果Fragment是Viewpager第一个页面时就不延迟加载
            if (userVisibleHint) {
                if (!isHaveLoaded) {
                    // fragment第一次可见且未加载数据就加载数据
                    onFragmentFirstVisible()
                    isHaveLoaded = true
                }
            }
        }
    }

    // 子类需要延迟加载时重写这个方法
    open fun onFragmentFirstVisible() {}

    // 这个方法先于fragment的OnCreate()生命周期方法调用
    override fun setUserVisibleHint(isVisibleToUser: Boolean) {
        super.setUserVisibleHint(isVisibleToUser)
        // setUserVisibleHint()这个方法有可能会在fragment的生命周期以外被调用,所以判断一下
        if (rootView == null) {
            return
        }
        if (isVisibleToUser && !isHaveLoaded) {
            onFragmentFirstVisible()
            isHaveLoaded = true
        }
    }
}

二丶代码里面注释已经写的很明白了,接下来就是让ViewPager中的Fragment继承这个BaseFragment,重写onFragmentFirstVisible()这个方法,在这个方法里面去执行网络请求就行了,ok就是这么简单!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值