Linjiajia
2023-10-26 ecaf8069072e71db4bff94671e72764b211d6af1
app_base/src/main/java/com/android/app_base/base/view/BaseActivity.java
@@ -5,6 +5,7 @@
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
@@ -15,30 +16,30 @@
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 com.android.app_base.action.TitleBarAction;
import com.android.app_base.base.BaseApplication;
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.android.app_base.utils.ScreenSizeUtils;
import com.android.app_base.base.viewmodel.SimpleViewModel;
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;
import java.util.Set;
/**
 *  Activity基类,所有的 Activity 都要继承此类
 */
public abstract class BaseActivity<V extends ViewDataBinding,VM extends BaseViewModel> extends AppCompatActivity implements TitleBarAction, ClickAction {
    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;
    /**
     * 标题栏对象
     */
@@ -47,8 +48,6 @@
     * 状态栏沉浸
     */
    private ImmersionBar mImmersionBar;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -61,10 +60,6 @@
        initView();
        //页面事件监听的方法,用于ViewModel层转到View层的事件注册
        initLiveDataObserve();
    }
    @Override
    protected void onResume() {
        super.onResume();
        //页面数据初始化方法
        initData();
    }
@@ -91,6 +86,7 @@
        initStateView();
        //初始化沉浸式状态栏和 titleBar
        initStatusBar();
        initSoftKeyboard();
    }
    /**
@@ -98,8 +94,7 @@
     */
    protected void initViewDataBindingAndViewModel() {
        if (getLayoutId() > 0) {
            binding = DataBindingUtil.setContentView(this, getLayoutId());
            initSoftKeyboard();
            binding = initViewBinding();
        }
        viewModelId = getVariableId();
        viewModel = initViewModel();
@@ -114,6 +109,13 @@
            getLifecycle().addObserver(viewModel);
        }
    }
    /**
     * 初始化ViewBinding
     */
    protected VDB initViewBinding() {
        return DataBindingUtil.setContentView(this, getLayoutId());
    }
    /**
     * 初始化ViewModel
     * @return 返回一个ViewModel
@@ -124,11 +126,12 @@
        if (type instanceof ParameterizedType){
            vmClass = (Class) ((ParameterizedType) type).getActualTypeArguments()[1];
        } else {
            //如果没有指定泛型参数,则默认使用BaseViewModel
            vmClass = (Class<VM>) BaseViewModel.class;
            //如果没有指定泛型参数,则默认使用SimpleViewModel
            vmClass = (Class<VM>) SimpleViewModel.class;
        }
        return new ViewModelProvider(this, (ViewModelProvider.Factory) ViewModelProvider.AndroidViewModelFactory.getInstance(getApplication())).get(vmClass);
    }
    /**
     * 对状态视图liveData进行观察监听
@@ -146,6 +149,9 @@
                        break;
                    case DATA_LOADING:
                        dataLoading();
                        break;
                    case DATA_FINISH:
                        dataFinish();
                        break;
                    case DATA_ERROR:
                        dataError();
@@ -167,19 +173,27 @@
        viewModel.getMessageLivaData().observe(this, new Observer<String>() {
            @Override
            public void onChanged(String message) {
                ToastUtils.showShort(message);
                if (!TextUtils.isEmpty(message)){
                    ToastUtils.showShort(message);
                }
            }
        });
    }
    /**
     * 缺省页等状态视图的更新
     * 有需求的,在子类选择重写
     */
    protected void dialogLoading() {
    }
    protected void dialogDismiss() {
    }
    protected void dataLoading() {
    }
    protected void dataFinish() {
    }
    protected void dataError() {
    }
@@ -194,12 +208,14 @@
     * 初始化沉浸式状态栏
     */
    protected void initStatusBar(){
        if (getTitleBar() != null) {
            getTitleBar().setOnTitleBarListener(this);
        }
        if (isStatusBarImmersionEnabled()) {
            getImmersionBarConfig().init();
            // 设置标题栏沉浸()
            if (getTitleBar() != null) {
                ImmersionBar.setTitleBar(this, getTitleBar());
                getTitleBar().setOnTitleBarListener(this);
            }
        }
    }