修改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
}
网友评论