package com.xw.common.base import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment abstract class BaseLazyloadFragment : Fragment() { protected var rootView: View? = null private var canVisible = false /** 是否是第一次加载布局 */ private var isInitView = false override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { initLoadMoreViews() isInitView = true isCanLoadData isVisible() return getContentView(layoutInflater, container) } override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) initData() setListener() setObservable() init() } override fun setUserVisibleHint(isVisibleToUser: Boolean) { super.setUserVisibleHint(isVisibleToUser) //isVisibleToUser值表示:该Fragment的UI用户是否可见,获取该标志记录下来 if (isVisibleToUser) { canVisible = true isCanLoadData } else { canVisible = false } } //所以能加载数据条件是view初始化完成并且对用户可见 private val isCanLoadData: Unit private get() { //所以能加载数据条件是view初始化完成并且对用户可见 if (canVisible && isInitView) { loadData() canVisible = false isInitView = false } } open fun setListener() {} open fun setObservable() {} open fun initData() {} open fun init() {} protected fun initLoadMoreViews() {} /** * 懒加载方法 */ protected fun loadData() {} abstract fun getContentView(inflater: LayoutInflater, container: ViewGroup?): View }