From 2b6fd0451bfa358052ac9eb061ec1ed595587e9e Mon Sep 17 00:00:00 2001
From: Linjiajia <319408893@qq.com>
Date: 星期二, 04 四月 2023 19:52:32 +0800
Subject: [PATCH] 改bug、
---
app_base/src/main/java/com/android/app_base/base/view/BaseActivity.java | 196 +++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 175 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..73f922c 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,39 @@
/**
* 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();
+
}
+ @Override
+ protected void onResume() {
+ super.onResume();
+ //椤甸潰鏁版嵁鍒濆鍖栨柟娉�
+ initData();
+ }
+
@Override
protected void onDestroy() {
@@ -54,28 +78,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 +134,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) {
@@ -121,6 +169,12 @@
}
}
});
+ viewModel.getMessageLivaData().observe(this, new Observer<String>() {
+ @Override
+ public void onChanged(String message) {
+ ToastUtils.showShort(message);
+ }
+ });
}
/**
* 缂虹渷椤电瓑鐘舵�佽鍥剧殑鏇存柊
@@ -139,6 +193,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 +281,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