rk
昨天 4a8ff39b0fab0627ef8f7459587d514cc01c3676
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package com.doumee.lib_coremodel.base;
 
import android.os.Bundle;
import android.view.View;
 
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.databinding.ViewDataBinding;
import androidx.fragment.app.Fragment;
 
/**
 * 懒加载Fragment
 * @author <a href="mailto:jenly1314@gmail.com">Jenly</a>
 */
public abstract class BaseLazyFragment<VM extends BaseViewModel,VDB extends ViewDataBinding> extends BaseFragment<VM,VDB> {
    /**
     * 是否可见
     */
    private boolean isVisible;
    /**
     * 是否初次加载
     */
    private boolean isFirstLoad;
    /**
     * 是否准备好加载
     */
    private boolean isPrepared;
 
    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        isFirstLoad = true;
        super.onViewCreated(view, savedInstanceState);
        isPrepared = true;
    }
 
    @Override
    public void onResume() {
        super.onResume();
        lazyLoad();
    }
 
    /**
     * {@link Fragment}可见
     */
    private void onVisible(){
        isVisible = true;
        lazyLoad();
    }
 
    /**
     * {@link Fragment}不可见
     */
    private void onInvisible(){
        isVisible = false;
    }
 
    @Override
    public void onHiddenChanged(boolean hidden) {
        super.onHiddenChanged(hidden);
        if(hidden){
            onInvisible();
        }else{
            onVisible();
        }
    }
 
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if(isVisibleToUser){
            onVisible();
        }else{
            onInvisible();
        }
 
    }
 
    /**
     * 懒加载,触发{@link #onLazyLoad()}
     */
    private void lazyLoad(){
        if(isFirstLoad && isPrepared && isVisible){
            //保证只加载一次
            isFirstLoad = false;
            onLazyLoad();
        }
    }
 
    /**
     * 懒加载
     */
    public abstract void onLazyLoad();
}