puzhibing
2026-08-21 5fa94b3718b4a78a4fcea4c97652b0ef20b7de3a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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
 
}