一直想用mvp架构写个项目,但是一直没有机会,最近项目上事情比较少,就看了看自己之前写的代码,发现项目虽然小,但是代码看起来很混乱,耦合性太高,于是产生了重构项目的念头。
在网上找了一些资料,再看了google官方的mvp架构demo之后,我开始了重构之旅。
众所周知,mvp分别就是model、view 、presenter ,model就是数据模型,view就是界面显示,而presenter就是view和model交互的中介。
google官方的demo通过contract接口把view和presenter的接口写到了一起,这样更方便项目的维护。
不多说,上代码,由于mvp的架构每个页面都差不多,这里就以项目里的login页面为例吧。
原本的代码是这样的:
public class LoginActivity extends BaseActivity
implements View.OnClickListener, CompoundButton.OnCheckedChangeListener {
。。。省略一部分绑定view代码
private boolean isAgree = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
initView();
initEvent();
}
/**
* 事件处理
*/
private void initEvent() {
设置点击事件的逻辑,省略。。。
}
private void initView() {
ButterKnife.bind(this);
。。。。这里主要是一些页面初始化的逻辑
Intent intent = getIntent();
boolean haveUpdate = intent.getBooleanExtra(Constants.HAVE_UPDATE, false);
// 判断是否需要更新
if (haveUpdate) {
String versionName = SharePreferenceUtils.getString(UIUtils.getContext(), UserConfig.versionName);
if (!TextUtils.isEmpty(versionName)) {
// 显示更新对话框
showUpdateDialog();
}
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.tv_agree_protocol:
// 跳转到webview
Intent intent = new Intent(this, WebViewActivity.class);
intent.putExtra(Constants.TITLE, getString(R.string.qtz_protocol));
startActivity(intent);
break;
case R.id.btn_login:
login();
break;
case R.id.tv_login_bottom:
registerFromPc();
break;
}
}
/**
* 访问网络注册帐号
*/
private void registerFromPc() {
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
Uri content_url = Uri.parse(getString(R.string.register_from_net));
intent.setData(content_url);
startActivity(intent);
}
/**
* 登录的逻辑
*/
private void login() {</span><span style="font-size: 18px;">
</span><span style="font-size:14px;">// <span style="font-family: Arial, Helvetica, sans-serif;">1.</span><span style="font-family: Arial, Helvetica, sans-serif;&