先说说为什么要构建Base类吧,我们一般在创建一个Activity的时候往往会去继承AppCompatActivity然后重写oncreate()方法以及生命周期,有几个Activity就会执行这样的操作几次,麻烦,代码量也多,我们构建一个Base类,让我们的Activity去继承这个base类,所有的生命周期都在Base里面操作,共通逻辑写一遍被继承就可以实现,且可以重写父类方法。但是也有一定缺点,比如产品提出了一个复杂的功能或者使用了一些第三方库,那么base可能就没有用,必须重写所有需要的业务方法,所以什么时候使用Base类是你需要去选择的。下面就先给大家讲一下我自己构建的BaseActivity:
BaseActivity
先贴代码:
public abstract class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (createLayout() != 0)
//如果传过来的布局文件ID不为0,那么加载布局文件
setContentView(createLayout());
}
@Override
protected void onPostCreate(@Nullable Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
initViews();
initData();
}
/**
* @return 用来加载布局文件
*/
protected abstract int createLayout();
/**
* 初始化视图
*/
public void initViews() {
}
/**
* 初始化数据
*/
public void initData() {
}
/**
* @param cls
* @param bundle 界面跳转
*/
public void startActivity(Class cls, Bundle bundle) {
Intent intent = new Intent(this, cls);
if (bundle != null) {
intent.putExtras(bundle);
}
startActivity(intent);
}
/**
* @param cls 界面跳转,不需要Bundle传值
*/
public void startActivity(Class cls) {
startActivity(cls, null);
}
/**
* @param cls
* @param bundle
* @param code 界面跳转,带请求码
*/
public void startActivityForResult(Class cls, Bundle bundle, int code) {
Intent intent = new Intent(this, cls);
if (bundle != null) {
intent.putExtras(bundle);
}
startActivityForResult(intent, code);
}
}
我们来继承这个BaseActivity:
public class MyActivity extends BaseActivity {
@Override
protected int createLayout() {
return R.layout.activity_a;
}
@Override
public void initViews() {
super.initViews();
}
@Override
public void initData() {
super.initData();
}
}
代码比之前直接继承AppCompatActivity要简洁的多,我们Base里面封装了一下跳转,还可以在里面封装更多的方法,比如,showTaost,进度条,等待加载等等,BaseFragment也与BaseActivity差不多,这里我就只贴代码出来:
public abstract class BaseFragment extends Fragment {
public Context getContext() {
return getActivity();
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(createLayout(), container, false);
}
protected abstract int createLayout();
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
initViews();
initData();
}
public void startActivity(Class cls) {
startActivity(cls, null);
}
public void startActivity(Class cls, Bundle bundle) {
Intent intent = new Intent(getContext(), cls);
if (bundle != null) {
intent.putExtras(bundle);
}
startActivity(intent);
}
public void startActivityForResult(Class cls, Bundle bundle, int code) {
Intent intent = new Intent(getContext(), cls);
if (bundle != null) {
intent.putExtras(bundle);
}
startActivityForResult(intent, code);
}
public void initViews() {
}
public void initData() {
}
}