From ad52afc6bcdaad95583ef7c619bc8c5749e78d76 Mon Sep 17 00:00:00 2001
From: Linjiajia <319408893@qq.com>
Date: 星期六, 18 三月 2023 03:58:19 +0800
Subject: [PATCH] 功能fragment标题栏
---
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