Android Mvp架构的小demo
文章目录
- 前言
- 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相关推荐
- [Android] Android MVP 架构下 最简单的 代码实现
Android MVP 架构下 最简单的 代码实现 首先看图: 上图是MVP,下图是MVC MVP和MVC的区别,在于以前的View层不仅要和model层交互,还要和controller层交互.而 ...
- Android MVP架构从入门到精通-真枪实弹
Android MVP架构从入门到精通-真枪实弹 一. 前言 二. MVC架构 1. MVC架构优缺点 A. 缺点 B. 优点 三. MVP架构 1. MVP架构优缺点 A. 缺点 B. 优点 四. ...
- Android MVP架构
Android 架构的理解昨天看了Android框架模式(1)-MVP入门,感觉理解起来有点困难,我就重新把java回调重新理解了一遍,并写了一篇博客,有需要的朋友可以看一看,java回调机制,下面我 ...
- android 服务架构,Android MVP架构搭建
目录 引言 为什么用MVP架构 MVP理论知识 乞丐版MVP架构模式的代码实现 MVP中的代码复用场景 平民版MVP架构 - base层顶级父类 Fragment怎么办 时尚版MVP架构 - Mode ...
- 谈谈 Android MVP 架构 | 掘金技术征文
前言:本文所写的是博主的个人见解,如有错误或者不恰当之处,欢迎私信博主,加以改正!原文链接,demo链接 MVP 架构简介 说起 MVP 架构,相信很多朋友都看过,网上也有很多这方面的资料.博主使用 ...
- android mvp框架基类,Android MVP架构项目搭建封装,基类封装
综述 对于MVP (Model View Presenter)架构是从著名的MVC(Model View Controller)架构演变而来的.而对于Android应用的开发中本身可视为一种MVC架构 ...
- 适用于小型项目的 Android MVP 架构
MVP 架构介绍 其实没什么好介绍的了,网上有很多相关的文章,我就不去 copy 了,反正就是 Google 公司推出的一个适合中大型 Android 项目开发的架构. 之前做了一个项目使用的就是 M ...
- Android MVP架构模式
目录 概述 实例 Model View Presenter 后记 全部代码 Model View Presenter 概述 MVP模式是Android常见的的一种架构模式,全称是Model.View. ...
- android封装网络请求界面,轻松搞定 android MVP 架构、okHttp 网络模块封装 的 项目...
CommonMvp commonMvp 能做什么? 1.mvp 实现 model view presenter 业务和界面解耦 2.整合 网络 请求 3.简化网络调用流程 4.整合状态栏和标题栏 实现 ...
- android MVP架构分享
闲来无事,写了一套MVP代码架构,希望能给各位分享一些程序逻辑: 一.java版架构 https://github.com/VcStrong/RxRetrofitMVPDemo.git mvp-v1和 ...
最新文章
- 存货的计划属性设置(ATO模型和PTO模型)
- 看了这篇 LeetCode 的刷题心得,再也不用抄别人代码了
- Android JUnit测试说明和实例演示
- Centos安装postgreSQL
- js 字符串加减法_JavaScript (+) 加法运算符
- 将uglifyjs添加到鼠标右键菜单
- c语言 多线程 参数,如何用C语言实现多线程
- 在matlab中输出、读取多个文件
- Java虚拟机知识汇总,有这些还怕面试被问到?
- 整合mybatis3.2.2跟spring3.0.1
- 2018-11-08
- ajaxfileupload 返回值_ajaxFileUpload上传带参数,返回值改成json格式
- 网页设计(二)——HTML与BOX
- el-select默认选中第一个,设置默认值
- SNORT3规则编写
- 域名注册流程是什么 注册域名的时候要注意什么
- U-GAT-IT 论文翻译
- P2P追债也用上大数据
- 计世资讯:大数据将使用户采购存储解决方案呈现两大新特征
- 用自己的路由器建立自己的服务器之创建网页
热门文章
- 合并m3u8(ts)文件的工具
- 【i.MX6ULL】驱动开发12——电容触摸驱动实践(上)
- Fences 2.1 - 高效实用的桌面图标栅栏分类管理软件神器 (桌面图标再多也不会乱)
- java聊天室项目_java聊天室的项目的设计书.doc
- Bus Hound 使用指南
- Java - 类加载器
- DH算法(密钥交换算法)
- c语言延时函数(c语言延时函数delay用法)
- FastDFS原理介绍
- C#之CAD二次开发笔记(1) 开发环境测试