From fcdddf8b9b34f9930bec454b5fffe41c0e33ba3c Mon Sep 17 00:00:00 2001 From: Linjiajia <319408893@qq.com> Date: 星期一, 24 四月 2023 21:17:05 +0800 Subject: [PATCH] 功能模块大部分 --- app_base/src/main/java/com/android/app_base/base/view/BaseActivity.java | 199 ++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 178 insertions(+), 21 deletions(-) diff --git a/app_base/src/main/java/com/android/app_base/base/view/BaseActivity.java b/app_base/src/main/java/com/android/app_base/base/view/BaseActivity.java index be3f169..51b3ab8 100644 --- a/app_base/src/main/java/com/android/app_base/base/view/BaseActivity.java +++ b/app_base/src/main/java/com/android/app_base/base/view/BaseActivity.java @@ -1,18 +1,31 @@ package com.android.app_base.base.view; +import android.app.Activity; +import android.content.Context; +import android.content.Intent; import android.os.Bundle; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.inputmethod.InputMethodManager; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.databinding.DataBindingUtil; import androidx.databinding.ViewDataBinding; +import androidx.drawerlayout.widget.DrawerLayout; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import androidx.lifecycle.ViewModelStoreOwner; +import com.android.app_base.action.TitleBarAction; +import com.android.app_base.base.action.ClickAction; import com.android.app_base.base.viewmodel.BaseViewModel; import com.android.app_base.base.StateViewEnum; +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; @@ -20,28 +33,34 @@ /** * Activity鍩虹被,鎵�鏈夌殑 Activity 閮借缁ф壙姝ょ被 */ -public abstract class BaseActivity<V extends ViewDataBinding,VM extends BaseViewModel> extends AppCompatActivity { - protected V binding; +public abstract class BaseActivity<VDB extends ViewDataBinding,VM extends BaseViewModel> extends AppCompatActivity implements TitleBarAction, ClickAction { + protected VDB binding; protected VM viewModel; private int viewModelId; - + /** + * 鏍囬鏍忓璞� + */ + private TitleBar mTitleBar; + /** + * 鐘舵�佹爮娌夋蹈 + */ + private ImmersionBar mImmersionBar; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - //缁戝畾 ViewDataBinding 鍜� ViewModel - initViewDataBindingAndViewModel(); - //鍒濆鍖栫姸鎬佽鍥� - initStateView(); + //Layout鍒濆鍖� + initLayout(); //椤甸潰鍙傛暟鍒濆鍖栨柟娉� initParam(); //椤甸潰view鍒濆鍖栨柟娉� initView(); - //椤甸潰鏁版嵁鍒濆鍖栨柟娉� - initData(); //椤甸潰浜嬩欢鐩戝惉鐨勬柟娉曪紝鐢ㄤ簬ViewModel灞傝浆鍒癡iew灞傜殑浜嬩欢娉ㄥ唽 initLiveDataObserve(); + //椤甸潰鏁版嵁鍒濆鍖栨柟娉� + initData(); } + @Override protected void onDestroy() { @@ -54,28 +73,51 @@ } } + /** + * 鍒濆鍖栧竷灞� + */ + protected void initLayout(){ + //缁戝畾 ViewDataBinding 鍜� ViewModel + initViewDataBindingAndViewModel(); + //鍒濆鍖栫姸鎬佽鍥� + initStateView(); + //鍒濆鍖栨矇娴稿紡鐘舵�佹爮鍜� titleBar + initStatusBar(); + initSoftKeyboard(); + } /** * ViewDataBinding鍜� ViewModel鐨勮幏鍙栧強鐩稿叧缁戝畾 */ - private void initViewDataBindingAndViewModel() { - binding = DataBindingUtil.setContentView(this, getLayoutId()); + protected void initViewDataBindingAndViewModel() { + if (getLayoutId() > 0) { + binding = initViewBinding(); + } viewModelId = getVariableId(); viewModel = initViewModel(); - //鍏宠仈ViewModel - binding.setVariable(viewModelId, viewModel); - //鏀寔LiveData缁戝畾xml锛屾暟鎹敼鍙橈紝UI鑷姩浼氭洿鏂� - binding.setLifecycleOwner(this); - //璁¬iewModel鎷ユ湁View鐨勭敓鍛藉懆鏈熸劅搴� - getLifecycle().addObserver(viewModel); - + if (binding != null){ + //鍏宠仈ViewModel + if (viewModelId > 0){ + binding.setVariable(viewModelId, viewModel); + } + //鏀寔LiveData缁戝畾xml锛屾暟鎹敼鍙橈紝UI鑷姩浼氭洿鏂� + binding.setLifecycleOwner(this); + //璁¬iewModel鎷ユ湁View鐨勭敓鍛藉懆鏈熸劅搴� + getLifecycle().addObserver(viewModel); + } } + /** + * 鍒濆鍖朧iewBinding + */ + protected VDB initViewBinding() { + return DataBindingUtil.setContentView(this, getLayoutId()); + } /** * 鍒濆鍖朧iewModel * @return 杩斿洖涓�涓猇iewModel */ - private VM initViewModel() { + protected VM initViewModel() { Class<VM> vmClass; Type type = getClass().getGenericSuperclass(); if (type instanceof ParameterizedType){ @@ -87,10 +129,11 @@ return new ViewModelProvider(this, (ViewModelProvider.Factory) ViewModelProvider.AndroidViewModelFactory.getInstance(getApplication())).get(vmClass); } + /** * 瀵圭姸鎬佽鍥緇iveData杩涜瑙傚療鐩戝惉 */ - private void initStateView() { + protected void initStateView() { viewModel.getStateViewLiveData().observe(this, new Observer<StateViewEnum>() { @Override public void onChanged(StateViewEnum stateViewEnum) { @@ -103,6 +146,9 @@ break; case DATA_LOADING: dataLoading(); + break; + case DATA_FINISH: + dataFinish(); break; case DATA_ERROR: dataError(); @@ -121,7 +167,16 @@ } } }); + viewModel.getMessageLivaData().observe(this, new Observer<String>() { + @Override + public void onChanged(String message) { + ToastUtils.showShort(message); + } + }); } + + + /** * 缂虹渷椤电瓑鐘舵�佽鍥剧殑鏇存柊 * 鏈夐渶姹傜殑锛屽湪瀛愮被閫夋嫨閲嶅啓 @@ -132,6 +187,8 @@ } protected void dataLoading() { } + protected void dataFinish() { + } protected void dataError() { } protected void dataNull() { @@ -139,6 +196,59 @@ protected void netError() { } protected void hide() { + } + + /** + * 鍒濆鍖栨矇娴稿紡鐘舵�佹爮 + */ + protected void initStatusBar(){ + if (isStatusBarImmersionEnabled()) { + getImmersionBarConfig().init(); + // 璁剧疆鏍囬鏍忔矇娴�() + if (getTitleBar() != null) { + ImmersionBar.setTitleBar(this, getTitleBar()); + getTitleBar().setOnTitleBarListener(this); + } + } + } + /** + * 鏄惁浣跨敤娌夋蹈寮忕姸鎬佹爮,鍙互瀛愮被閲嶅啓鎸囧畾 + */ + protected boolean isStatusBarImmersionEnabled() { + return true; + } + /** + * 鑾峰彇鐘舵�佹爮娌夋蹈鐨勯厤缃璞� + */ + @NonNull + public ImmersionBar getImmersionBarConfig() { + if (mImmersionBar == null) { + mImmersionBar = createStatusBarConfig(); + } + return mImmersionBar; + } + /** + * 鍒涘缓鐘舵�佹爮娌夋蹈鐨勯厤缃璞� + */ + @NonNull + protected ImmersionBar createStatusBarConfig() { + return ImmersionBar.with(this) + // 榛樿鐘舵�佹爮瀛椾綋棰滆壊涓洪粦鑹� + .statusBarDarkFont(isStatusBarDarkFont(),0.2f);//涓嶅啓榛樿涓轰寒鑹� + } + /** + * 鐘舵�佹爮瀛椾綋娣辫壊妯″紡 + */ + protected boolean isStatusBarDarkFont() { + return true; + } + @Override + @Nullable + public TitleBar getTitleBar() { + if (mTitleBar == null) { + mTitleBar = obtainTitleBar(findViewById(Window.ID_ANDROID_CONTENT)); + } + return mTitleBar; } /** @@ -174,4 +284,51 @@ */ public abstract void initLiveDataObserve(); + @Override + public void finish() { + hideSoftKeyboard(); + super.finish(); + } + + /** + * 闅愯棌杞敭鐩� + */ + protected void hideSoftKeyboard() { + // 闅愯棌杞敭鐩橈紝閬垮厤杞敭鐩樺紩鍙戠殑鍐呭瓨娉勯湶 + View view = getCurrentFocus(); + if (view != null) { + InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + if (manager != null && manager.isActive(view)) { + manager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); + view.clearFocus(); + } + } + } + + /** + * 鍒濆鍖栬蒋閿洏 + */ + protected void initSoftKeyboard() { + // 鐐瑰嚮澶栭儴闅愯棌杞敭鐩橈紝鎻愬崌鐢ㄦ埛浣撻獙 + getContentView().setOnClickListener(v -> hideSoftKeyboard()); + } + + public ViewGroup getContentView() { + return findViewById(Window.ID_ANDROID_CONTENT); + } + + public Activity getSelfActivity() { + return this; + } + + /** + * 濡傛灉褰撳墠鐨� Activity锛坰ingleTop 鍚姩妯″紡锛� 琚鐢ㄦ椂浼氬洖璋� + */ + @Override + protected void onNewIntent(Intent intent) { + super.onNewIntent(intent); + // 璁剧疆涓哄綋鍓嶇殑 Intent锛岄伩鍏� Activity 琚潃姝诲悗閲嶅惎 Intent 杩樻槸鏈�鍘熷厛鐨勯偅涓� + setIntent(intent); + } + } -- Gitblit v1.9.1