From 590c1cff46b105d774271f950caa9f65523f05c1 Mon Sep 17 00:00:00 2001 From: Linjiajia <319408893@qq.com> Date: 星期五, 29 十二月 2023 20:20:40 +0800 Subject: [PATCH] 1、增加护眼模式主题\n2、修复显示问题 --- app_base/src/main/java/com/android/app_base/base/view/BaseFragment.java | 160 ++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 144 insertions(+), 16 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..df683f6 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 @@ -1,20 +1,28 @@ package com.android.app_base.base.view; import android.os.Bundle; +import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +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.action.ClickAction; import com.android.app_base.base.viewmodel.BaseViewModel; +import com.blankj.utilcode.util.ToastUtils; +import com.gyf.immersionbar.ImmersionBar; +import com.hjq.bar.TitleBar; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; @@ -24,10 +32,27 @@ * @date 2023.03.02. 15:50 * @desc Fragment鍩虹被 */ -public abstract class BaseFragment<V extends ViewDataBinding,VM extends BaseViewModel> extends Fragment { - protected V binding; +public abstract class BaseFragment<VDB extends ViewDataBinding,VM extends BaseViewModel> extends Fragment implements TitleBarAction, ClickAction { + protected VDB binding; protected VM viewModel; - private int viewModelId; + protected int viewModelId; + + /** + * 鏍囬鏍忓璞� + */ + protected TitleBar mTitleBar; + /** + * 鐘舵�佹爮娌夋蹈 + */ + protected ImmersionBar mImmersionBar; + /** + * 鏍瑰竷灞� + */ + protected View mRootView; + /** + * 璇ragment鏄惁鍔犺浇杩囨暟鎹� + * */ + protected boolean isLoaded; @Override @@ -40,35 +65,52 @@ @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 = initViewBinding(inflater, container); + mRootView = binding.getRoot(); + return mRootView; + } + return null; } + @Override - public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); //缁戝畾 ViewDataBinding 鍜� ViewModel initViewDataBindingAndViewModel(); //鍒濆鍖栫姸鎬佽鍥� initStateView(); + //鍒濆鍖栨矇娴稿紡鐘舵�佹爮鍜� titleBar + initStatusBar(); //椤甸潰view鍒濆鍖栨柟娉� initView(); - //椤甸潰鏁版嵁鍒濆鍖栨柟娉� - initData(); //椤甸潰浜嬩欢鐩戝惉鐨勬柟娉曪紝鐢ㄤ簬ViewModel灞傝浆鍒癡iew灞傜殑浜嬩欢娉ㄥ唽 initLiveDataObserve(); } + + @Override + public void onResume() { + super.onResume(); + + 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鐨勮幏鍙栧強鐩稿叧缁戝畾 @@ -83,6 +125,12 @@ //璁¬iewModel鎷ユ湁View鐨勭敓鍛藉懆鏈熸劅搴� getLifecycle().addObserver(viewModel); + } + /** + * 鍒濆鍖朧iewBinding + */ + protected VDB initViewBinding(LayoutInflater inflater, @Nullable ViewGroup container) { + return DataBindingUtil.inflate(inflater,getLayoutId(), container, false); } /** @@ -135,6 +183,14 @@ } } }); + viewModel.getMessageLivaData().observe(this, new Observer<String>() { + @Override + public void onChanged(String message) { + if (!TextUtils.isEmpty(message)){ + ToastUtils.showShort(message); + } + } + }); } /** * 缂虹渷椤电瓑鐘舵�佽鍥剧殑鏇存柊 @@ -156,36 +212,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