一、为什么要抽取BaseActivity
Android实际开发中,一般情况下Activity使用得较多,也不排除一些用Fragment为主搭建的框架,但一般情况都是使用Activity。
Activity的加载大概就分为那个几个步骤:
一:获取上个页面带过来的数据,或者初始化一些备用的数据
二:加载布局
三:初始化标题栏,初始化View
四:访问网络加载数据
抽取统一的BaseActivity:
第一可以规定代码的编写规范。
第二多人开发维护变得简单。
第三在BaseActivity里面可以做一些通用的操作等等。
二、由于代码BaseActivity较为简单,直接上代码
/**
* Activity的Base类
*/
public abstract class BaseActivity extends AppCompatActivity {
protected View mContentView;
private Unbinder mBinder;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 1. 初始化上个页面带过来的数据
initData();
// 2. 调用setContentView加载布局
mContentView = convertView();
if (mContentView == null) {
throw new ClassCastException("setLayout 只能是View 或者布局ID");
}
setContentView(mContentView);
// 3.做一些通用的操作,用注解绑定View
mBinder = ButterKnife.bind(this);
// 4. 绑定头部
initTitle();
// 5.做一些View初化操作
initView(savedInstanceState);
// 6.网络的一些处理
initNet();
}
/**
* 对View进行处理
*/
private View convertView() {
View contentView = null;
if (getLayout() instanceof Integer) {
Integer layoutId = (Integer) getLayout();
contentView = getLayoutInflater().inflate(layoutId, null, false);
}
if (getLayout() instanceof View) {
contentView = (View) getLayout();
}
return contentView;
}
/**
* 页面的布局ID 或者View
*/
protected abstract Object getLayout();
@Override
protected void onDestroy() {
if (mBinder != null) {
mBinder.unbind();
mBinder = null;
}
mContentView = null;
super.onDestroy();
}
/**
* 2. 初始化头
*/
protected void initTitle() {
}
/**
* 1.获取上个页面传递过来的数据
*/
protected void initData() {
}
/**
* 3. 初始化View
*/
protected abstract void initView(Bundle savedInstanceState);
/**
* 4.初始化网络
*/
protected void initNet() {
}
/**
* 打开Activity
*/
protected void startActivity(Class<?> clazz) {
startActivity(clazz, null);
}
/**
* 打开Activity
*/
protected void startActivity(Class<?> clazz, Bundle bundle) {
Intent intent = new Intent(this, clazz);
if (bundle != null) {
intent.putExtras(bundle);
}
startActivity(intent);
}
/**
* 获取当前的Activity
*/
protected Activity getAppActivity() {
return this;
}
}
了解更多实际开发的基类抽取,请看:
Android Activity基类的抽取AppActivity(二)
源码地址:https://gitee.com/lfwen/TitleDemo
网友评论