适用范围
当你的页面比较简单,一两百行就能写完时,建议使用CommonMVVMActivity CommonMVVMActivity.java
先看示例代码如下:
package com.okaynaira.android.ui.activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.okaynaira.android.R;
import com.okaynaira.android.dao.UserDao;
import com.okaynaira.android.databinding.ActivityTestBinding;
import com.okaynaira.android.model.User;
import leo.work.support.base.activity.mvvm.CommonMVVMActivity;
/**
* ---------------------------------------------------------------------------------------------
* 功能描述: 这是一个简单的Activity
* ---------------------------------------------------------------------------------------------
* 时 间: 2021/12/20
* ---------------------------------------------------------------------------------------------
* 代码创建: 1613-3
* ---------------------------------------------------------------------------------------------
* 代码备注: MVC架构,主要用于向大家介绍一个好看的Activity应该怎么写
* ---------------------------------------------------------------------------------------------
**/
public class TestActivity extends CommonMVVMActivity<ActivityTestBinding> {
/*********************
* 全 局 变 量 *
*********************/
private User user;
...
/*********************
* 生 命 周 期 方 法 *
*********************/
@Override
protected int setLayout() {
return R.layout.activity_test;
}
//初始化数据
@Override
protected void initData(Bundle bundle) {
user = UserDao.getInstance().getUser();
}
//初始化View
@Override
protected void initViews(Bundle bundle) {
binding.btnNext.setBackgroundColor(getResources().getColor(R.color.udesk_color_d8d8d8));
}
//网络请求
@Override
protected void loadData() {
super.loadData();
}
//事件监听
@Override
protected void initListener() {
super.initListener();
binding.btnNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
next();
}
});
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onPause() {
super.onPause();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
@Override
protected void onDestroy() {
super.onDestroy();
}
...
/*********************
* 业 务 方 法 *
*********************/
private void next() {
}
...
}
CommonMVVMActivity.java
package leo.work.support.base.activity.mvvm;
import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.content.res.Resources;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ViewDataBinding;
import android.os.Bundle;
import leo.work.support.support.common.LogUtil;
/**
* ---------------------------------------------------------------------------------------------
* 功能描述: 简单的Activity
* ---------------------------------------------------------------------------------------------
* 时 间: 2021/4/21
* ---------------------------------------------------------------------------------------------
* 代码创建: 刘桂安
* ---------------------------------------------------------------------------------------------
* 代码备注:
* ---------------------------------------------------------------------------------------------
**/
public abstract class CommonMVVMActivity<T extends ViewDataBinding> extends AppCompatActivity {
//Activity
public Activity activity;
//ViewDataBinding
public T binding;
//当前页面是否在前台
public boolean hasFront = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//打印Log
LogUtil.e("=======================>" + this.getClass().getName());
//竖屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
//
activity = this;
//
binding = DataBindingUtil.setContentView(activity, setLayout());
//
initData(savedInstanceState);
//
initViews(savedInstanceState);
//
loadData();
//
initListener();
}
protected abstract int setLayout();
/**
* 初始化数据
*/
protected abstract void initData(Bundle savedInstanceState);
/**
* 加载View
*
* @param savedInstanceState
*/
protected void initViews(Bundle savedInstanceState) {
}
/**
* 加载数据,如:网络请求
*/
protected void loadData() {
}
/**
* 初始化监听器
*/
protected void initListener() {
}
/**
* 使用时应该写在这上面
* ....
* super.onResume();
* 不应该写在super下面
*/
@Override
protected void onResume() {
super.onResume();
hasFront = true;
}
@Override
protected void onPause() {
super.onPause();
hasFront = false;
}
/**
* 设置 app 不随着系统字体的调整而变化
*/
@Override
public Resources getResources() {
Resources resources = super.getResources();
Configuration config = new Configuration();
config.setToDefaults();
resources.updateConfiguration(config, resources.getDisplayMetrics());
return resources;
}
}
CommonMVVMActivity主要做了几件事
- 强制屏幕方向为竖屏
- 提供ViewDataBinding对象binding,方便开发者快速开发
- 打印了Log,方便开发者快速通过Log定位Activity
- 提供Activity对象,开发者不需要再写xxxx.this,this...而是统一使用activity,代码整洁
- 规定了onCreate方法执行如下四个方法(请注意执行顺序):
- initData <---- 初始化数据(比如:EventBus注册,从数据库中获取对象与数据,对象构建与赋值等等...)
- initViews <---- 初始化View(比如设置文字,背景,显示隐藏View等等...)
- loadData <---- 网络请求,数据加载(比如网络请求等,任何延时获取的数据)
- initListener <---- 初始化监听事件(比如:点击事件,双击事件,EditText文字监听,广播监听注册等等...)
快速生成Activity的模板
-
设置方式:
-
模板内容:
#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end import android.os.Bundle; import com.okaynaira.android.R; import leo.work.support.base.activity.mvvm.CommonMVVMActivity; #parse("File Header.java") public class ${NAME} extends CommonMVVMActivity<#if (${BINDING_NAME} && ${BINDING_NAME} != "")${BINDING_NAME}#end#if (${BINDING_NAME} && ${BINDING_NAME} == "")Activity(xxxBinding)#end> { /********************* * 全 局 变 量 * *********************/ //..... /********************* * 生 命 周 期 方 法 * *********************/ @Override protected int setLayout() { return R.layout.#if (${LAYOUT_NAME} && ${LAYOUT_NAME} != "")${LAYOUT_NAME}#end#if (${LAYOUT_NAME} && ${LAYOUT_NAME} == "")activity_#end; } @Override protected void initData(Bundle bundle) { } /********************* * 业 务 方 法 * *********************/ //..... }
注意点
在Activity开发过程中,请务必按照《Activity开发规范》进行开发。