ViewPager+fragment懒加载

本文介绍了一种懒加载Fragment的基类实现方法,通过抽象类BaseFragment,实现了Fragment的视图创建、初始化及可见性变化的监听。该实现能够有效控制Fragment的生命周期,避免不必要的资源加载,提高应用性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package cn.lonsun.adapter.lazyfragment

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment

/**
 * @Copyright © 2005-2019  安徽龙讯信息科技有限公司
 * @ClassName: BaseFragment
 * @Description: ${DESCRIPTION}
 * @Author: berlin
 * @Date: 2019/8/1 0001 15:54
 */
abstract class BaseFragment : Fragment() {

    private var rootView: View? = null
    private var isViewCreated = false
    private var isFirstVisible = true
    private var isCurrentVisible = false

    /**
     * 布局文件
     */
    protected abstract fun layoutResId(): Int

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        if (!isViewCreated) {
            rootView = inflater.inflate(layoutResId(), container, false)
            isViewCreated = true
            initViews(rootView!!)
        }
        if (!isHidden && userVisibleHint) { //可见的时候
            dispatchUserVisibleHint(true)
        }
        return rootView
    }

    private fun dispatchUserVisibleHint(visible: Boolean) {
        if (isViewCreated) {
            if (isFirstVisible && visible) {
                isFirstVisible = false
                onFirstVisibleLoad()
            } else if (isCurrentVisible != visible) onFragmentVisibleChanged(visible)
        }
    }


    override fun setUserVisibleHint(isVisibleToUser: Boolean) {
        super.setUserVisibleHint(isVisibleToUser)
        dispatchUserVisibleHint(isVisibleToUser)
        isCurrentVisible = isVisibleToUser
    }

    override fun onHiddenChanged(hidden: Boolean) {
        super.onHiddenChanged(hidden)
        dispatchUserVisibleHint(hidden)
        isCurrentVisible = hidden
    }

    override fun onPause() {
        super.onPause()
        if(isHidden&&userVisibleHint)onFragmentVisibleChanged(false)
    }

    override fun onResume() {
        super.onResume()
        if (!isHidden && userVisibleHint) {
            onFragmentVisibleChanged(true)
        }
    }


    protected abstract fun onFragmentVisibleChanged(isVisible: Boolean)

    protected abstract fun onFirstVisibleLoad()

    protected abstract fun initViews(rootView: View)

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值