文章目录

  • 前言
    • MVP模式是MVC模式在Android上的一种变体,要介绍MVP就得先介绍MVC。在MVC模式中,Activity应该是属于View这一层。而实质上,它既承担了View,同时也包含一些Controller的东西在里面。这对于开发与维护来说不太友好,耦合度大高了。把Activity的View和Controller抽离出来就变成了View和Presenter,这就是MVP模式。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/e7469fcca61a47a1807ad3257849e1c5.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAbGJqMjN2czY=,size_20,color_FFFFFF,t_70,g_se,x_16) 让我们来用mvp写一个登录界面 ![在这里插入图片描述](https://img-blog.csdnimg.cn/b320b67edb2e4c4bb2b1db8f9e4fd94b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAbGJqMjN2czY=,size_13,color_FFFFFF,t_70,g_se,x_16)
  • 一、Model层
    • 1.定义Model接口
    • 2.实现**ILoginModel** ,用子线程睡眠3秒来模拟网络的请求过程
    • 3.补充:Listener的定义
  • 二、Present 层
    • 1.Presenter接口
    • 2.实现Presenter接口
  • 三、View 层
    • 1、IView接口,抽象view的行为
    • 2、Activity 去实现IView接口
    • 补充:xml
  • 总结

前言

MVP模式是MVC模式在Android上的一种变体,要介绍MVP就得先介绍MVC。在MVC模式中,Activity应该是属于View这一层。而实质上,它既承担了View,同时也包含一些Controller的东西在里面。这对于开发与维护来说不太友好,耦合度大高了。把Activity的View和Controller抽离出来就变成了View和Presenter,这就是MVP模式。

让我们来用mvp写一个登录界面

一、Model层

1.定义Model接口

public interface ILoginModel {void login(String account, String pwd, LoginListener listener);
}

2.实现ILoginModel ,用子线程睡眠3秒来模拟网络的请求过程

public class LoginModelImpl implements ILoginModel {private final Handler handler = new Handler(Looper.getMainLooper());@Overridepublic void login(String account, String pwd, LoginListener listener) {new Thread(new Runnable() {@Overridepublic void run() {try {Thread.sleep(3_000);} catch (InterruptedException e) {e.printStackTrace();}if (TextUtils.equals(account, "lbj") && TextUtils.equals(pwd, "123")) {handler.post(new Runnable() {@Overridepublic void run() {listener.onSuccess();}});} else {handler.post(new Runnable() {@Overridepublic void run() {listener.onFailed();}});}}}).start();}
}

3.补充:Listener的定义

public interface LoginListener {void onSuccess();void onFailed();
}

二、Present 层

1.Presenter接口

代码如下(示例):

public interface ILoginPresenter {void doLogin(String account,String pwd);
}

2.实现Presenter接口

public class LoginPresenterImpl implements ILoginPresenter {private ILoginModel model;//持有model,请求数据private ILoginView view;//持有view,操控界面的行为public LoginPresenterImpl(ILoginView loginView) {model = new LoginModelImpl();view = loginView;}@Overridepublic void doLogin(String account, String pwd) {view.showPb();model.login(account, pwd, new LoginListener() {@Overridepublic void onSuccess() {view.hidePb();view.toast("登录成功!!!");}@Overridepublic void onFailed() {view.hidePb();view.toast("登录失败!!!");}});}
}

三、View 层

1、IView接口,抽象view的行为

public interface ILoginView {void showPb();//展示进度条void hidePb();//隐藏进度条void toast(String content);
}

2、Activity 去实现IView接口

public class MainActivity extends AppCompatActivity implements ILoginView {private EditText etAccount;private Button btnLogin;private ProgressBar pbLogin;private EditText etPwd;private LoginPresenterImpl presenter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);presenter = new LoginPresenterImpl(this);pbLogin = findViewById(R.id.pb_login);btnLogin = findViewById(R.id.btn_login);etAccount = findViewById(R.id.et_account);etPwd = findViewById(R.id.et_pwd);btnLogin.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {presenter.doLogin(etAccount.getText().toString(), etPwd.getText().toString());}});}@Overridepublic void showPb() {pbLogin.setVisibility(View.VISIBLE);}@Overridepublic void hidePb() {pbLogin.setVisibility(View.INVISIBLE);}@Overridepublic void toast(String content) {Toast.makeText(this, content, Toast.LENGTH_SHORT).show();}
}

补充:xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".view.MainActivity"><TextViewandroid:id="@+id/textView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="账号"android:textSize="34sp"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><EditTextandroid:id="@+id/et_account"android:layout_width="200dp"android:layout_height="wrap_content"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toEndOf="@+id/textView"app:layout_constraintTop_toTopOf="parent" /><TextViewandroid:id="@+id/textView2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="36dp"android:text="密码"android:textSize="34sp"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/textView" /><EditTextandroid:id="@+id/et_pwd"android:layout_width="200dp"android:layout_height="wrap_content"android:layout_marginTop="39dp"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toEndOf="@+id/textView2"app:layout_constraintTop_toBottomOf="@+id/et_account" /><Buttonandroid:id="@+id/btn_login"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="59dp"android:text="登录"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/et_pwd" /><ProgressBarandroid:id="@+id/pb_login"android:layout_width="200dp"android:layout_height="200dp"android:visibility="invisible"app:layout_constraintBottom_toTopOf="@+id/btn_login"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/et_pwd" />
</androidx.constraintlayout.widget.ConstraintLayout>

总结

枯燥的看mvp架构难以理解,建议新手敲一下这个登录界面,使用mvp架构,这样可以大致建立一个对mvp架构的初步理解,后续就可以在项目中使用也可以与他人交流。

Android Mvp架构的小demo相关推荐

  1. [Android] Android MVP 架构下 最简单的 代码实现

    Android  MVP 架构下  最简单的 代码实现 首先看图: 上图是MVP,下图是MVC MVP和MVC的区别,在于以前的View层不仅要和model层交互,还要和controller层交互.而 ...

  2. Android MVP架构从入门到精通-真枪实弹

    Android MVP架构从入门到精通-真枪实弹 一. 前言 二. MVC架构 1. MVC架构优缺点 A. 缺点 B. 优点 三. MVP架构 1. MVP架构优缺点 A. 缺点 B. 优点 四. ...

  3. Android MVP架构

    Android 架构的理解昨天看了Android框架模式(1)-MVP入门,感觉理解起来有点困难,我就重新把java回调重新理解了一遍,并写了一篇博客,有需要的朋友可以看一看,java回调机制,下面我 ...

  4. android 服务架构,Android MVP架构搭建

    目录 引言 为什么用MVP架构 MVP理论知识 乞丐版MVP架构模式的代码实现 MVP中的代码复用场景 平民版MVP架构 - base层顶级父类 Fragment怎么办 时尚版MVP架构 - Mode ...

  5. 谈谈 Android MVP 架构 | 掘金技术征文

    前言:本文所写的是博主的个人见解,如有错误或者不恰当之处,欢迎私信博主,加以改正!原文链接,demo链接 MVP 架构简介 说起 MVP 架构,相信很多朋友都看过,网上也有很多这方面的资料.博主使用 ...

  6. android mvp框架基类,Android MVP架构项目搭建封装,基类封装

    综述 对于MVP (Model View Presenter)架构是从著名的MVC(Model View Controller)架构演变而来的.而对于Android应用的开发中本身可视为一种MVC架构 ...

  7. 适用于小型项目的 Android MVP 架构

    MVP 架构介绍 其实没什么好介绍的了,网上有很多相关的文章,我就不去 copy 了,反正就是 Google 公司推出的一个适合中大型 Android 项目开发的架构. 之前做了一个项目使用的就是 M ...

  8. Android MVP架构模式

    目录 概述 实例 Model View Presenter 后记 全部代码 Model View Presenter 概述 MVP模式是Android常见的的一种架构模式,全称是Model.View. ...

  9. android封装网络请求界面,轻松搞定 android MVP 架构、okHttp 网络模块封装 的 项目...

    CommonMvp commonMvp 能做什么? 1.mvp 实现 model view presenter 业务和界面解耦 2.整合 网络 请求 3.简化网络调用流程 4.整合状态栏和标题栏 实现 ...

  10. android MVP架构分享

    闲来无事,写了一套MVP代码架构,希望能给各位分享一些程序逻辑: 一.java版架构 https://github.com/VcStrong/RxRetrofitMVPDemo.git mvp-v1和 ...

最新文章

  1. 存货的计划属性设置(ATO模型和PTO模型)
  2. 看了这篇 LeetCode 的刷题心得,再也不用抄别人代码了
  3. Android JUnit测试说明和实例演示
  4. Centos安装postgreSQL
  5. js 字符串加减法_JavaScript (+) 加法运算符
  6. 将uglifyjs添加到鼠标右键菜单
  7. c语言 多线程 参数,如何用C语言实现多线程
  8. 在matlab中输出、读取多个文件
  9. Java虚拟机知识汇总,有这些还怕面试被问到?
  10. 整合mybatis3.2.2跟spring3.0.1
  11. 2018-11-08
  12. ajaxfileupload 返回值_ajaxFileUpload上传带参数,返回值改成json格式
  13. 网页设计(二)——HTML与BOX
  14. el-select默认选中第一个,设置默认值
  15. SNORT3规则编写
  16. 域名注册流程是什么 注册域名的时候要注意什么
  17. U-GAT-IT 论文翻译
  18. P2P追债也用上大数据
  19. 计世资讯:大数据将使用户采购存储解决方案呈现两大新特征
  20. 用自己的路由器建立自己的服务器之创建网页

热门文章

  1. 合并m3u8(ts)文件的工具
  2. 【i.MX6ULL】驱动开发12——电容触摸驱动实践(上)
  3. Fences 2.1 - 高效实用的桌面图标栅栏分类管理软件神器 (桌面图标再多也不会乱)
  4. java聊天室项目_java聊天室的项目的设计书.doc
  5. Bus Hound 使用指南
  6. Java - 类加载器
  7. DH算法(密钥交换算法)
  8. c语言延时函数(c语言延时函数delay用法)
  9. FastDFS原理介绍
  10. C#之CAD二次开发笔记(1) 开发环境测试