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