admin
2021-06-05 ddff7888bf7e754d12fb5fc85a58f3012f456490
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package com.tejia.lijin.app.view;
 
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
 
import com.tejia.lijin.app.presenter.BasePresenter;
 
 
public abstract class BaseFragment<V, T extends BasePresenter<V>> extends Fragment {
    public String TAG = getClass().getSimpleName() + "";
    private static final String STATE_SAVE_IS_HIDDEN = "STATE_SAVE_IS_HIDDEN";
    protected T mPresenter;
    //定义一个View用来保存Fragment创建的时候使用打气筒工具进行的布局获取对象的存储
    protected View view;
    private boolean first = false;//记录首次添加view
 
    /**
     * 当Fragment进行创建的时候执行的方法
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (mPresenter == null) {
            mPresenter = createPresenter();//创建presenter.
        }
        if (null != mPresenter) {
            mPresenter.attachView((V) this);
        }
    }
 
    @Override
    public void onSaveInstanceState(Bundle outState) {
        outState.putBoolean(STATE_SAVE_IS_HIDDEN, isHidden());
    }
 
    /**
     * 这个方法是关于Fragment完成创建的过程中,进行界面填充的方法,该方法返回的是一个view对象
     * 在这个对象中封装的就是Fragment对应的布局
     */
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        if (view == null) {
            first = true;//记录已经添加过一次
            view = inflater.inflate(initFragmentView(), container, false);
        } else {
            try {
                ((ViewGroup) view.getParent()).removeView(view);
            } catch (Exception e) {
                container.removeView(view);
            }
        }
//        view = inflater.inflate(initFragmentView(), container, false);
        return view;
    }
 
    /**
     * 这个方法当onCreateView方法中的view创建完成之后,执行
     * 在inflate完成view的创建之后,可以将对应view中的各个控件进行查找findViewById
     */
    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        if (first) {//只进入一次
            initFragmentChildView(view);
        }
        first = false;
    }
 
    /**
     * 这个方法是在Fragment完成创建操作之后,进行数据填充操作的时候执行的方法
     */
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        initFragmentData(savedInstanceState);
    }
 
    /**
     * 完成打气筒操作
     */
    protected abstract int initFragmentView();
 
    /**
     * 进行findViewById的操作
     *
     * @param view 打气筒生成的View对象
     */
    protected abstract void initFragmentChildView(View view);
 
    /**
     * 网络数据填充的操作
     *
     * @param savedInstanceState
     */
    protected abstract void initFragmentData(Bundle savedInstanceState);
 
    /**
     * 创建Presenter对象
     */
    protected abstract T createPresenter();
 
    @Override
    public void onDestroy() {
        super.onDestroy();
        if (null != mPresenter) {
            mPresenter.detachView();
        }
    }
}