MVP升级版

MVP 分为3个模块:

  • 处理界面的View
  • 处理逻辑的Presenter
  • 定制协议(可以理解为模块接口)的Contract

Contract

该类主要来定义当前模块所需要的逻辑接口和View接口。
比如你项目中有很多的模块:登录模块,注册模块……
拿登录模块举例子:
1. 首先定义登录模块的协议

public class LoginContract {
    // 逻辑协议
    // 定义模块逻辑接口
    public interface Presenter{
        void login(String userName,String psw);
        void forgetPsw(String userName);
    }

    // UI协议
    // 定义模块View接口
    public interface View{
        void showLoginLoading();
        void dismissLoginLoading();
        void showLoginSuccess();
    }

    }

上面例子中我们定义了登录模块中需要用到的逻辑操作login 、 forgetPsw。定义了模块中需要的相关View层UI显示的showLoginLoading()、void dismissLoginLoading()、showLoginSuccess().

Presenter

在上面Logincontract中我们定义了这个模块中的逻辑协议(接口)。所以我们要在Presenter这个逻辑层去实现那些定义好的协议。
同样来拿Login来举例子。

public class LoginPresenter implements LoginContract.Presenter {
    private LoginContract.View mView;
    private Context mContext;

    public LoginPresenter(LoginContract.View mView, Context mContext) {
        this.mView = mView;
        this.mContext = mContext;
    }

    @Override
    public void login(String userName, String psw) {
        //根据逻辑操作的返回来触发UI层的变化
        mView.showLoginLoading();
        //这里做一些关于登录的逻辑操作,比如用userName 和 psw进行接口调用。
        mView.dismissLoginLoading();
    }

    @Override
    public void forgetPsw(String userName) {

    }
}

Ok,我们在逻辑层Presenter中对我们定义的逻辑协议做了实现,现在就差View层协议没有实现了。

View

说到View,我们就不得不想到Activity、Fragment、Dialog等跟UI相关的载体。
拿Activity来举例,下面实现登录界面的Activity。

public class LoginActivity extends AppCompatActivity implements LoginContract.View, View.OnClickListener {
    private LoginContract.Presenter mPresenter;
    private Button btn_login;
    private Button btn_forgetPsw;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn_login = (Button) findViewById(R.id.btn_login);
        btn_forgetPsw = (Button) findViewById(R.id.btn_forgetPsw);
        mPresenter = new LoginPresenter(this,this);
        btn_forgetPsw.setOnClickListener(this);
        btn_forgetPsw.setOnClickListener(this);
}

    @Override
    public void showLoginLoading() {
        //progress.show();
    }

    @Override
    public void dismissLoginLoading() {
        //progress.dismiss();
    }

    @Override
    public void showLoginSuccess() {
        //dialog.show();
    }

    @Override
    public void onClick(View v) {
        int id = v.getId();
        if(id == R.id.btn_forgetPsw){
            **mPresenter.forgetPsw("userName");
        }

        if(id == R.id.btn_login){
            mPresenter.login("userName","psw");
        }
    }
}

首先View要实现Contract定义的View接口,然后在初始化的时候,持有一个处理逻辑的Presenter对象。然后在View使用到逻辑的地方,只需要调用mPresenter.逻辑操作即可。

以上就是简单的MVP在项目中的应用,是不是很简单。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值