Linjiajia
2023-04-04 a1d1fb7c44e33c4baeb52964a027932018bc1325
app_base/src/main/java/com/android/app_base/base/view/BaseActivity.java
@@ -15,14 +15,16 @@
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.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.OnTitleBarListener;
import com.hjq.bar.TitleBar;
import java.lang.reflect.ParameterizedType;
@@ -31,11 +33,10 @@
/**
 *  Activity基类,所有的 Activity 都要继承此类
 */
public abstract class BaseActivity<V extends ViewDataBinding,VM extends BaseViewModel> extends AppCompatActivity implements TitleBarAction{
    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;
    /**
     * 标题栏对象
     */
@@ -44,12 +45,6 @@
     * 状态栏沉浸
     */
    private ImmersionBar mImmersionBar;
    @Override
    protected void onResume() {
        super.onResume();
    }
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -60,11 +55,17 @@
        initParam();
        //页面view初始化方法
        initView();
        //页面数据初始化方法
        initData();
        //页面事件监听的方法,用于ViewModel层转到View层的事件注册
        initLiveDataObserve();
    }
    @Override
    protected void onResume() {
        super.onResume();
        //页面数据初始化方法
        initData();
    }
    @Override
    protected void onDestroy() {
@@ -87,6 +88,7 @@
        initStateView();
        //初始化沉浸式状态栏和 titleBar
        initStatusBar();
        initSoftKeyboard();
    }
    /**
@@ -94,8 +96,7 @@
     */
    protected void initViewDataBindingAndViewModel() {
        if (getLayoutId() > 0) {
            binding = DataBindingUtil.setContentView(this, getLayoutId());
            initSoftKeyboard();
            binding = initViewBinding();
        }
        viewModelId = getVariableId();
        viewModel = initViewModel();
@@ -109,6 +110,13 @@
            //让ViewModel拥有View的生命周期感应
            getLifecycle().addObserver(viewModel);
        }
    }
    /**
     * 初始化ViewBinding
     */
    protected VDB initViewBinding() {
        return DataBindingUtil.setContentView(this, getLayoutId());
    }
    /**
     * 初始化ViewModel
@@ -125,6 +133,7 @@
        }
        return new ViewModelProvider(this, (ViewModelProvider.Factory) ViewModelProvider.AndroidViewModelFactory.getInstance(getApplication())).get(vmClass);
    }
    /**
     * 对状态视图liveData进行观察监听
@@ -158,6 +167,12 @@
                    default:
                        break;
                }
            }
        });
        viewModel.getMessageLivaData().observe(this, new Observer<String>() {
            @Override
            public void onChanged(String message) {
                ToastUtils.showShort(message);
            }
        });
    }
@@ -233,12 +248,6 @@
        return mTitleBar;
    }
    @Override
    public void onLeftClick(TitleBar titleBar) {
        TitleBarAction.super.onLeftClick(titleBar);
        onBackPressed();
    }
    /**
     * 获取根布局的id,由子类实现返回
     * @return layout的id
@@ -288,6 +297,7 @@
            InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            if (manager != null && manager.isActive(view)) {
                manager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
                view.clearFocus();
            }
        }
    }