From 85e989454fcc64a3cd99eaf659e00c4a2c10b534 Mon Sep 17 00:00:00 2001
From: Linjiajia <319408893@qq.com>
Date: 星期五, 17 三月 2023 16:00:59 +0800
Subject: [PATCH] 主页

---
 app_base/src/main/java/com/android/app_base/base/view/BaseFragment.java |  136 +++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 123 insertions(+), 13 deletions(-)

diff --git a/app_base/src/main/java/com/android/app_base/base/view/BaseFragment.java b/app_base/src/main/java/com/android/app_base/base/view/BaseFragment.java
index d76223b..b85a593 100644
--- a/app_base/src/main/java/com/android/app_base/base/view/BaseFragment.java
+++ b/app_base/src/main/java/com/android/app_base/base/view/BaseFragment.java
@@ -4,17 +4,23 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.Window;
 
+import androidx.annotation.IdRes;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.databinding.DataBindingUtil;
 import androidx.databinding.ViewDataBinding;
 import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentActivity;
 import androidx.lifecycle.Observer;
 import androidx.lifecycle.ViewModelProvider;
 
+import com.android.app_base.action.TitleBarAction;
 import com.android.app_base.base.StateViewEnum;
 import com.android.app_base.base.viewmodel.BaseViewModel;
+import com.gyf.immersionbar.ImmersionBar;
+import com.hjq.bar.TitleBar;
 
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
@@ -24,10 +30,27 @@
  * @date 2023.03.02. 15:50
  * @desc Fragment鍩虹被
  */
-public abstract class BaseFragment<V extends ViewDataBinding,VM extends BaseViewModel> extends Fragment {
+public abstract class BaseFragment<V extends ViewDataBinding,VM extends BaseViewModel> extends Fragment implements TitleBarAction {
     protected V binding;
     protected VM viewModel;
     private int viewModelId;
+
+    /**
+     * 鏍囬鏍忓璞�
+     */
+    private TitleBar mTitleBar;
+    /**
+     * 鐘舵�佹爮娌夋蹈
+     */
+    private ImmersionBar mImmersionBar;
+    /**
+     * 鏍瑰竷灞�
+     */
+    private View mRootView;
+    /**
+     * 璇ragment鏄惁鍔犺浇杩囨暟鎹�
+     * */
+    private boolean isLoaded;
 
 
     @Override
@@ -40,8 +63,13 @@
     @Nullable
     @Override
     public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
-        binding = DataBindingUtil.inflate(inflater,getLayoutId(), container, false);
-        return binding.getRoot();
+        isLoaded = false;
+        if (getLayoutId() > 0){
+            binding = DataBindingUtil.inflate(inflater,getLayoutId(), container, false);
+            mRootView = binding.getRoot();
+            return mRootView;
+        }
+        return null;
     }
 
     @Override
@@ -53,22 +81,32 @@
         initStateView();
         //椤甸潰view鍒濆鍖栨柟娉�
         initView();
-        //椤甸潰鏁版嵁鍒濆鍖栨柟娉�
-        initData();
         //椤甸潰浜嬩欢鐩戝惉鐨勬柟娉曪紝鐢ㄤ簬ViewModel灞傝浆鍒癡iew灞傜殑浜嬩欢娉ㄥ唽
         initLiveDataObserve();
     }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        //鍒濆鍖栨矇娴稿紡鐘舵�佹爮鍜� titleBar
+        initStatusBar();
+        if (!isLoaded){
+            //椤甸潰鏁版嵁鍒濆鍖栨柟娉�
+            initData();
+            isLoaded = true;
+        }
+    }
+
     @Override
     public void onDestroyView() {
         super.onDestroyView();
         //瑙i櫎Messenger娉ㄥ唽
 //        Messenger.getDefault().unregister(viewModel);
-
         if(binding != null){
             binding.unbind();
         }
+        mRootView = null;
     }
-
 
     /**
      *  ViewDataBinding鍜� ViewModel鐨勮幏鍙栧強鐩稿叧缁戝畾
@@ -156,36 +194,108 @@
     }
 
     /**
+     * 鍒濆鍖栨矇娴稿紡鐘舵�佹爮
+     */
+    protected void initStatusBar(){
+        if (isStatusBarImmersionEnabled()) {
+            getImmersionBarConfig().init();
+            // 璁剧疆鏍囬鏍忔矇娴�()
+            if (getTitleBar() != null) {
+                ImmersionBar.setTitleBar(this, getTitleBar());
+                getTitleBar().setOnTitleBarListener(this);
+            }
+        }
+    }
+    /**
+     * 鏄惁浣跨敤娌夋蹈寮忕姸鎬佹爮,鍙互瀛愮被閲嶅啓鎸囧畾
+     */
+    protected boolean isStatusBarImmersionEnabled() {
+        return false;
+    }
+    /**
+     * 鑾峰彇鐘舵�佹爮娌夋蹈鐨勯厤缃璞�
+     */
+    @NonNull
+    public ImmersionBar getImmersionBarConfig() {
+        if (mImmersionBar == null) {
+            mImmersionBar = createStatusBarConfig();
+        }
+        return mImmersionBar;
+    }
+    /**
+     * 鍒涘缓鐘舵�佹爮娌夋蹈鐨勯厤缃璞�
+     */
+    @NonNull
+    protected ImmersionBar createStatusBarConfig() {
+        return ImmersionBar.with(this)
+                // 榛樿鐘舵�佹爮瀛椾綋棰滆壊涓洪粦鑹�
+                .statusBarDarkFont(isStatusBarDarkFont(),0.2f)//涓嶅啓榛樿涓轰寒鑹�
+                .keyboardEnable(false);// 瑙e喅杞敭鐩樹笌搴曢儴杈撳叆妗嗗啿绐侀棶棰橈紝榛樿涓篺alse锛岃繕鏈変竴涓噸杞芥柟娉曪紝鍙互鎸囧畾杞敭鐩榤ode
+    }
+    /**
+     * 鑾峰彇鐘舵�佹爮瀛椾綋棰滆壊
+     */
+    protected boolean isStatusBarDarkFont() {
+        // 杩斿洖鐪熻〃绀洪粦鑹插瓧浣�
+        return true;
+    }
+    @Override
+    @Nullable
+    public TitleBar getTitleBar() {
+        if (mTitleBar == null) {
+            mTitleBar = obtainTitleBar((ViewGroup) getView());
+        }
+        return mTitleBar;
+    }
+    /**
      * 鑾峰彇鏍瑰竷灞�鐨刬d锛岀敱瀛愮被瀹炵幇杩斿洖
      * @return layout鐨刬d
      */
-    public abstract int getLayoutId();
+    protected abstract int getLayoutId();
 
     /**
      * 鑾峰彇ViewModel鐨刬d锛岀敱瀛愮被瀹炵幇杩斿洖
      * @return BR涓璿iewModel鐨刬d
      */
-    public abstract int getVariableId();
+    protected abstract int getVariableId();
 
     /**
      * 鍒濆鍖栭〉闈㈠弬鏁帮紝渚嬪浠庝笂涓�涓猘ctivity浼犻�掕繃鏉ョ殑鍙傛暟
      */
-    abstract void initParam();
+    protected abstract void initParam();
 
     /**
      * 鍒濆鍖栭〉闈iew锛屼緥濡備竴浜泇iew鐨勯殣钘忔垨鏄剧ず,浠ュ強鐐瑰嚮閫昏緫绛夌敤鎴蜂氦浜�
      */
-    abstract void initView();
+    protected abstract void initView();
 
     /**
      * 鍒濆鍖栭〉闈㈡暟鎹�
      */
-    abstract void initData();
+    protected abstract void initData();
 
     /**
      * 鍒濆鍖朙iveData鐨勭洃鍚�
      * 绠�鍗曠殑鏁版嵁灞曠ず鍙�氳繃DataBinding鐩存帴鍙屽悜缁戝畾鍒皒ml涓�
      */
-    abstract void initLiveDataObserve();
+    protected abstract void initLiveDataObserve();
+
+
+    public FragmentActivity getSelfActivity() {
+        return getActivity();
+    }
+    @NonNull
+    @Override
+    public View getView() {
+        return mRootView;
+    }
+
+    /**
+     * 鏍规嵁璧勬簮 id 鑾峰彇涓�涓� View 瀵硅薄
+     */
+    public <V extends View> V findViewById(@IdRes int id) {
+        return mRootView.findViewById(id);
+    }
+
 
 }

--
Gitblit v1.9.1