美文网首页
androidx fragment懒加载方案

androidx fragment懒加载方案

作者: 肉某人 | 来源:发表于2019-09-30 10:42 被阅读0次

    修改viewpager适配器构造方法

    FragmentStatePagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT)
    

    其中BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT会让fragment的生命周期默认停在onStart,搭配viewpager使用,只有当前被选中的page会调用onResume

    创建BaseFragment.kt 重写onResume方法

    package com.****.base
    
    import android.content.Context
    import android.os.Bundle
    import android.view.LayoutInflater
    import android.view.View
    import android.view.ViewGroup
    import androidx.appcompat.app.AppCompatActivity
    import androidx.databinding.DataBindingUtil
    import androidx.databinding.ViewDataBinding
    import androidx.fragment.app.Fragment
    
    abstract class BaseFragment<T : ViewDataBinding> : Fragment() {
        lateinit var mActivity: AppCompatActivity
        lateinit var binding: T
        
        //是否懒加载
        var isLazyLoad = true
    
        //是否加载数据(暂时用于第一次加载判断,以后也许会有其他情况)
        private var isNeedLoad = true
    
        abstract fun bind(): Int
    
        abstract fun init()
    
        override fun onAttach(context: Context) {
            super.onAttach(context)
            logE("BaseFragment", "${this::class.java.simpleName}:onAttach")
        }
    
        override fun onStart() {
            super.onStart()
            logE("BaseFragment", "${this::class.java.simpleName}:onStart")
        }
    
        override fun onResume() {
            super.onResume()
            logE("BaseFragment", "${this::class.java.simpleName}:onResume")
            //如果是第一次且是懒加载
            //执行初始化方法
            if (isNeedLoad && isLazyLoad) {
                init()
                //数据已加载,置false,避免每次切换都重新加载数据
                isNeedLoad = false
            }
        }
    
        override fun onPause() {
            super.onPause()
            logE("BaseFragment", "${this::class.java.simpleName}:onPause")
        }
    
        override fun onCreateView(
            inflater: LayoutInflater,
            container: ViewGroup?,
            savedInstanceState: Bundle?
        ): View? {
            logE("BaseFragment", "${this::class.java.simpleName}:onCreateView")
            binding = DataBindingUtil.inflate(inflater, bind(), container, false)
            return binding.root
        }
    
        override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
            super.onViewCreated(view, savedInstanceState)
            logE("BaseFragment", "${this::class.java.simpleName}:onViewCreated")
            if (!isLazyLoad)
                init() 
        }
    
        fun isBindingInitialized() = ::binding.isInitialized
    
    }
    

    相关文章

      网友评论

          本文标题:androidx fragment懒加载方案

          本文链接:https://www.haomeiwen.com/subject/uvycpctx.html