Android Mvp框架原理+demo展示

1 篇文章 0 订阅

MVP到底是什么?

mvp其实只是一个让代码变得优雅的结构。

M:数据层,处理网络请求回来的数据,数据计算等。

V:view层,只负责view的变化

P:负责M和V的交互,通过构造函数传入IV,构造函数内new M,P中处理view与数据的业务交互。

上代码吧,实现一个登陆的简单例子。

先看整个目录结构:

public interface LoginListener {
    void onSuccess();
    void onFailed();
}
public interface IModel {
    void login(String name,String password,LoginListener listener);
}
public class LoginModel implements IModel {
    @Override
    public void login(String name, String password, LoginListener listener) {
        // 发起网络请求,处理返回数据
        if ("carl".equals(name) && "123456".equals(password)) {
            listener.onSuccess();
        } else {
            listener.onFailed();
        }
    }
}
public class LoginPresenter {
    private final ILoginView mLoginView;
    private final LoginModel mLoginModel;

    public LoginPresenter(ILoginView loginView) {
        this.mLoginModel = new LoginModel();
        this.mLoginView = loginView;
    }
    
    public void login(){
        mLoginModel.login(mLoginView.getName(), mLoginView.getPassword(), new LoginListener() {
            @Override
            public void onSuccess() {
                mLoginView.loginSuccess();
            }

            @Override
            public void onFailed() {
                mLoginView.loginFailed();
            }
        });
    }
}
public interface ILoginView {
    String getName();
    String getPassword();
    void loginSuccess();
    void loginFailed();
}
public class LoginActivity extends Activity implements ILoginView {
    private LoginPresenter mPresenter;
    private EditText mEditTextName;
    private EditText mEditTextPs;
    private TextView mTvLogin;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_login);
        intView();
        setData();
    }

    private void intView() {
        mEditTextName = findViewById(R.id.mEditTextName);
        mEditTextPs = findViewById(R.id.mEditTextPs);
        mTvLogin = findViewById(R.id.mTvLogin);
        mTvLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mPresenter.login();
            }
        });
    }

    private void setData() {
        mPresenter = new LoginPresenter(this);
    }

    @Override
    public String getName() {
        return mEditTextName.getText().toString();
    }

    @Override
    public String getPassword() {
        return mEditTextPs.getText().toString();
    }

    @Override
    public void loginSuccess() {
        Toast.makeText(this, "success", Toast.LENGTH_LONG).show();
    }

    @Override
    public void loginFailed() {
        Toast.makeText(this, "failed", Toast.LENGTH_LONG).show();
    }
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值