美文网首页
Android MVP框架

Android MVP框架

作者: 安徒生的叔叔 | 来源:发表于2019-01-02 16:18 被阅读0次

今天看了一下MVP接口,大致的流程自己简单的梳理一下:Activity、Fragment实现对应IView接口并重写接口对应的方法(主要是用户让P层来通知我们的activity(V层)刷新页面)。当一个需要修改页面的事件需要发生的时候,Activity或Fragment通过持有的P层对象,去调用Model的执行特定的任务(P层持有Model层的对象以及View层的对象),在P层再去实现Model层的任务执行返回接口接受回调。在P层接受到对于的回调后,根据自己的需求去使用view的去调用刷新Activity或Fragment的布局,讲了这么多,我们直接来代码吧。。。

我希望大家在看这篇文章的时候认真,静下心来去看,自己按照代码打一遍,我相信你会有所收获。

项目目录:

1、大致以model、presenter与view分包


image.png

2、model:按照功能模块划分、分别有loginModel接口与其对于的实现类LoginImp

3、view:按照界面加功能点来分activity、fragment以及功能点loginView接口,activity和fragment分别会去实现不同的iView接口。

LoginModel接口:

package wait.love.com.mvptest.model.login;

/**
 * Created by wanglinbo on 02/01/2019 10:01
 * E-Mail Address:1105059963@qq.com
 */
public interface LoginModel {

    //回调接口
    interface OnLoginListener {
        void onLoginSuccess();

        void onLoginFail();
    }

    void login(String username, String password, OnLoginListener onLoginListener);
}

LoginImp:LoginModel的接口的实现主要用户数据的操作,网络请求,本地读取等

package wait.love.com.mvptest.model.login;

import android.os.Handler;

/**
 * Created by wanglinbo on 02/01/2019 10:04
 * E-Mail Address:1105059963@qq.com
 * M层 主要做网络请求,实现OnLoginLister的回调,以及主要实际网络请求
 */
public class LoginImp implements LoginModel{
    @Override
    public void login(final String username, final String password, final OnLoginListener onLoginListener) {
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                if (username.equals("admin") && password.equals("123456")) {
                    onLoginListener.onLoginSuccess();
                } else {
                        onLoginListener.onLoginFail();
                }
            }
        }, 3000);


    }
}

LoginPresenter接口:声明Activity或Fragment(V层)需要操作的方法

package wait.love.com.mvptest.presenter.login;

/**
 * Created by wanglinbo on 02/01/2019 10:19
 * E-Mail Address:1105059963@qq.com
 */
public interface LoginPresenter {
    void doLogin(String name,String password);
}

LoginPresenterImp: LoginPresenterImp是LoginPresenter接口的实现,主要用来做登录这个功能的View与Model层的控制

package wait.love.com.mvptest.presenter.login;

import wait.love.com.mvptest.model.login.LoginModel;
import wait.love.com.mvptest.view.login.LoginView;

/**
 * Created by wanglinbo on 02/01/2019 10:20
 * E-Mail Address:1105059963@qq.com
 */
public class LoginPresenterImp implements LoginPresenter, LoginModel.OnLoginListener {

    private LoginModel loginModel;
    private LoginView loginView;

    public LoginPresenterImp(LoginModel loginModel, LoginView loginView) {
        this.loginModel = loginModel;
        this.loginView = loginView;
    }

    @Override
    public void onLoginSuccess() {
        loginView.hideProgress();
        loginView.loginSuccess();
        loginView.changeData();
    }

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

    @Override
    public void doLogin(String name, String password) {
        loginView.showProgress();
        loginModel.login(name,password,this);
    }
}

LoginView:V层接口,

package wait.love.com.mvptest.view.login;

/**
 * Created by wanglinbo on 02/01/2019 09:57
 * E-Mail Address:1105059963@qq.com
 * View层接口
 */
public interface LoginView {
    void showProgress();
    void hideProgress();
    void changeData();
    void loginSuccess();
    void loginFail();
}

MainActivity:LoginView的实现:


public class MainActivityextends AppCompatActivityimplements LoginView {

private Buttonlogin;

    private EditTextusername;

    private EditTextpassword;

    private LoginPresenterImploginPresenterImp =new LoginPresenterImp(new LoginImp(), this);

    @Override

    protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        initView();

    }

private void initView() {

login =this.findViewById(R.id.login);

        username =this.findViewById(R.id.username);

        password =this.findViewById(R.id.password);

        login.setOnClickListener(mClick);

    }

@Override

    public void showProgress() {

Log.i("xyz", "登录中");

    }

@Override

    public void hideProgress() {

Log.i("xyz", "隐藏进度条");

    }

@Override

    public void changeData() {

Toast.makeText(MainActivity.this.getApplicationContext(),"成功",Toast.LENGTH_LONG).show();

        login.setText("登录成功");

    }

@Override

    public void loginSuccess() {

Log.i("xyz", "登录成功");

    }

@Override

    public void loginFail() {

Log.i("xyz", "登录失败");

    }

private View.OnClickListenermClick =new View.OnClickListener() {

@Override

        public void onClick(View view) {

switch (view.getId()) {

case R.id.login:

loginPresenterImp.doLogin(username.getText().toString().trim(), password.getText().toString().trim());

break;

            }

}

};

}

相关文章

  • MVP

    Google官方MVP+Dagger2架构详解【从零开始搭建android框架系列(6)】 Android MVP...

  • Mosby -- Android上的MVP框架

    Mosby 是一个用于 Android 上的 MVP 框架,可以帮助大家在 Android 上通过 MVP 模式做...

  • Retrofit2+Rxjava+MVP 实践

    此博文根据前面两篇文章 Android MVP 架构初试 Android MVP 架构封装 再结合主流框架Ret...

  • Rxandroid和MVP结合的案例

    MVP是什么 参考博客:框架模式MVP在Android中的使用在MVC框架中,View是可以直接读取Model模型...

  • Android Retrofit 2 + Retrofit 2

    实现MVC基础框架实现MVP基础框架(一)Android Retrofit 2 + Retrofit 2 封装(二...

  • Android中MVP设计框架浅析

    一、MVP设计模式简介 目前Android设计成熟的框架有MVC,MVP和MVVM,MVP是由MCV演变而来,MV...

  • Android MVP

    Android MVP初探 Android MVP进阶 Android MVP高级 Android MVP扩展

  • android 官方mvp框架优化:lifecycle-mvp,

    转载请注明出处:android 官方mvp框架优化:lifecycle-mvp,像前端那样组合式写页面 地址...

  • Android MVP框架

    1、简单实用的MVP框架 2、从最简单的MVP讲起

  • Android MVP框架

    今天看了一下MVP接口,大致的流程自己简单的梳理一下:Activity、Fragment实现对应IView接口并重...

网友评论

      本文标题:Android MVP框架

      本文链接:https://www.haomeiwen.com/subject/adgzlqtx.html