Android之 学习MVP最最简单的构建

MVP是从MVC里演变来的,比MVC有更好的耦合性,相通的地方:

Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。

不同的地方:

1.MVC中的V可以直接访问M。MVP中的V不可以直接访问M,需要通过P。

···

不赘述了。

打开你的AS,一起从头开始搭建一个MVP Demo吧(以登录为例)

1.定义View层接口

public interface LoginView {
    void loginSuccess();//登录成功
    void loginFail();//登录失败

}

2.MainActivity实现View接口

public class MainActivity extends AppCompatActivity implements LoginView {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


    @Override
    public void loginSuccess() {
        //登录成功的操作
    }

    @Override
    public void loginFail() {
        //登录失败的操作
    }
}

3.定义Model接口

public interface LoginModel {
    interface OnLoginListener {
        void onLoginSuccess();

        void onLoginFail();
    }
    void login(String username, String password, OnLoginListener listener);
}

4.Model接口的实现类

public class LoginModelImpl implements LoginModel {
    @Override
    public void login(final String username, final String password, final OnLoginListener listener) {
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                if (username.equals("admin") && password.equals("admin")){
                    listener.onLoginSuccess();
                } else {
                    listener.onLoginFail();
                }
            }
        }, 2000);
    }
}

5.定义Present接口(控制Model来执行具体登录操作)

public interface LoginPresent {
    void doLogin(String username, String password);
}

6.Present接口的实现类

public class LoginPresentImpl implements LoginPresent, LoginModel.OnLoginListener {
    private LoginView mView;
    private LoginModel mModel;

    public LoginPresentImpl(LoginView mView, LoginModel mModel) {
        this.mView = mView;
        this.mModel = mModel;
    }

    @Override
    public void doLogin(String username, String password) {
        mModel.login(username, password, this);
    }

    @Override
    public void onLoginSuccess() {
        mView.loginSuccess();
    }

    @Override
    public void onLoginFail() {
        mView.loginFail();
    }
}

7.在MainActivity中控制Present去执行登录

public class MainActivity extends AppCompatActivity implements LoginView {
    private LoginPresentImpl mPresent;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mPresent = new LoginPresentImpl(this, new LoginModelImpl());


        findViewById(R.id.login).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String username = ((EditText) findViewById(R.id.username)).getText().toString().trim();
                String password = ((EditText) findViewById(R.id.password)).getText().toString().trim();
                if (!username.equals("") && !password.equals("")) {
                    //执行登录操作需要通过Present控制Model请求
                    mPresent.doLogin(username, password);
                } else {
                    //用户名或者密码为空
                    //当然,可以根据业务需求,更改判断。这里随便写的
                }
            }
        });
    }

    @Override
    public void loginSuccess() {
        //登录成功的操作
    }

    @Override
    public void loginFail() {
        //登录失败的操作
    }
}

最最简单的MVP Demo 就构建完了。

哦对了...

8.activity_main.xml



    
        
        
        

OK,完成了。

这篇博客应该算比较简单的了。照着做就行

 

你可能感兴趣的:(学习之路,MVP,MVP框架,最简单,Android,学习)