欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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;

Android MVP学习笔记

BaseView和BasePresenter是两个接口里面代码很简单:
Android MVP学习笔记

Android MVP学习笔记

下面我们设计业务场景:点击按钮在TextView上显示文字。。

  • Step1
    创建契约类MVPContact.class

    Android MVP学习笔记

  • 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欲哭无泪。