Android MVP学习笔记
程序员文章站
2024-03-15 18:28:12
...
MVP很简单,敲一遍代码就会:
一, 怎么来理解MVP
M:model
V:View
P : Presenter
基本上介绍MVP的都会介绍每个字母代表什么。对于刚接触MVP的童鞋来说,其实从最简单的来理解就行了(深层次我也不理解 哈哈 ):
M:数据
V:主要是将Activity或Fragment视为View层 负责数据的展示
P : Presenter 业务逻辑的处理
二、代码:
看什么关系图啊,越看越晕,看代码最实际,代码敲一边不理解起码也能先用着:
首先我们需要BaseView和BasePresenter;
BaseView和BasePresenter是两个接口里面代码很简单:
下面我们设计业务场景:点击按钮在TextView上显示文字。。
-
Step1
创建契约类MVPContact.class - Step2
创建MVPPresenter
public class MVPPresenter implements MVPContact.Presenter {
private MVPContact.View mView;
public MVPPresenter(MVPContact.View mView) {
this.mView = mView;
mView.setPresenter(this);
}
@Override
public void get() {
mView.showMessage("哈哈哈");
}
@Override
public void start() {
}
@Override
public void subscribe() {
}
@Override
public void unsubscribe() {
}
}
- Step3
创建Activity并实现MVPContact.View
public class MvpActivity extends Activity implements MVPContact.View{
@BindView(R.id.btn_get)
Button btnGet;
@BindView(R.id.tv_show)
TextView tvShow;
private MVPContact.Presenter mPresenter;
@Override
public void setPresenter(MVPContact.Presenter presenter) {
this.mPresenter = presenter;
}
@Override
public void showMessage(String message) {
tvShow.setText(message);
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mvp);
init();
}
private void init() {
ButterKnife.bind(this);
mPresenter = new MVPPresenter(this);
}
@OnClick({
R.id.btn_get
})
public void click(View view){
switch (view.getId()){
case R.id.btn_get:
mPresenter.get();
break;
}
}
}
大功告成!
总结:
这是一个简单的DEMO,是不是觉得本来一句代码tv.setText()就搞定的问题,为什么弄的这么复杂?
我们多创建了Contact、BaseView、BasePresenter、MVPPresenter四个类。确实增加了代码量,但同时,我们将业务逻辑的处理都放在了Presenter中,Activity视作View层只负责数据的展示,提高了代码的可维护性。试想如果不是简单的一个功能,而是非常多的网络请求、读取数据库、计算等业务,我们可以在Presenter中很方便的去进行维护,而不是看着臃肿的Activity欲哭无泪。
下一篇: Python自动化单元测试实例展示