MVP 实现原理及简单案例登陆(二)
来源:互联网 发布:vb版电子教室 编辑:程序博客网 时间:2024/06/05 17:02
MVP概述
Model层
主要处理与数据相关的操作,如操作数据库、请求服务器等。不与View层直接交互,通过Presenter层与View层互动。
View层
显示界面,对外提供可刷新UI的接口,不做控制操作。如点击登陆按钮后,弹出等待进度框,View层只提供了一个弹出等待进度框的方法,调用弹出是Presenter层通过View的方法调用的(后面会详细介绍)
Presenter层
Presenter层负责与Model层交互,又负责界面UI更新。View层也持有Presenter的引用,来执行用户操作请求
登陆案例
因为案例案例源码相对于快速理解MVP不是很合适,所以先实现一个简单案例,大家理解了大概原理之后,在深入讲解案例源码的实现
项目目录
model层
- ILoginModel.java 接口类
public interface ILoginModel { /** * 登陆 */ void login(Map<String, String> param, String url, OnStringCallBack callBack);}
- LoginModel.java 具体实现
public class LoginModel implements ILoginModel { private Context mContext; public LoginModel(Context context) { this.mContext = context; } @Override public void login(Map<String, String> param, String url, OnStringCallBack callBack) { //OnStringCallBack是一个回调接口 callBack.onResponse("{'flag':'success'}"); }}
View层
- IBaseView.java
public interface IBaseView { /** * @return 获取上下文 */ Context getContext(); /** * 显示提示信息 * @param resourceId */ void showToast(int resourceId);}
- ILoginView.java
public interface ILoginView extends IBaseView { /** * 添加EditText文本改变的监听 */ void addTextChangedListener(); /** * 显示加载进度框 */ void showProgress(); /** * 取消加载进度框 */ void dismissProgress(); /** * 跳转到主界面 */ void jump2MainPager(); /** * 获取请求参数 * * @param flag */ Map<String, String> getParam(int flag); /** * 设置删除图标的显示隐藏 * @param resourceId * @param visibility */ void setDeleteIconVisibility(int resourceId, int visibility); /** * 清除输入框中的文字 * @param resourceId */ void clearEditText(int resourceId);}
- LoginActivity.java
实现ILoginView接口中的方法,详见代码
presenter层
- IBasePresenter.java
一些基类方法,当前为空。因为功能简单,没有可抽取的
-ILoginPresenter.java
public interface ILoginPresenter extends IBasePresenter{ /** * 登陆 */ void login(); /** * 文字改变 * @param resourceId * @param charSequence */ void textChanged(int resourceId,CharSequence charSequence); /** * 点击输入框右侧的删除按钮 * @param resourceId */ void deleteIconClick(int resourceId);}
- LoginPresenter.java
具体实现详见代码
执行流程
View层抽取原则
当然针对于当前的简单案例,接下来的文章会对复杂案例进行抽取,包括各种细节会做详细说明
1.需要初始化的信息: setOnclickListener、addTextChangedListener诸如此类的,都要抽取View接口方法,方便Presenter初始化时调用(详见LoginPresenter类)。
/** * 添加文本改变的监听 */ @Override public void addTextChangedListener()
2.显示/取消加载进度框、显示提示信息、获取上下文信息
/** * @return 获取上下文 */ Context getContext(); /** * 显示提示信息 * @param resourceId */ void showToast(int resourceId); /** * 显示加载进度框 */ void showProgress(); /** * 取消加载进度框 */ void dismissProgress();
3.账号输入框中点击删除按钮的响应事件和文本改变的响应事件。以id为参数
/** * 设置删除图标的显示隐藏 * @param resourceId * @param visibility */ void setDeleteIconVisibility(int resourceId, int visibility); /** * 清除输入框中的文字 * @param resourceId */ void clearEditText(int resourceId);
4.网络请求成功后,做的跳转事件
/** * 跳转到主界面 */ void jump2MainPager();
效果图
项目地址
https://github.com/407365100/MVP-LoginDemo
0 0
- MVP 实现原理及简单案例登陆(二)
- Java 实现简单登陆案例
- MVP的简单实现(本地登陆)
- mvp 简单的案例, mvp实现登录及注册 分为moudle数据层 activity视图v层 Presenter逻辑层
- 互斥量原理及简单案例
- Mvp实现登陆注册
- MVP实现登陆注册
- MVP实现登陆注册
- 一个简单登陆示例的MVC和MVP实现
- 单点登陆原理与简单实现
- MVP模式实现接口登陆
- HTTP 代理原理及实现(二)
- HTTP 代理原理及实现(二)
- HTTP 代理原理及实现(二)
- SpringAOP基本概念及实现原理(二)
- 简单的MVP写法(二)
- ChainMapper/ChainReducer实现原理及案例分析
- 简单的asp.net模拟邮箱系统基础实现(二 (2)具体版块功能的实现及关键代码之登陆页面)
- vijos 1459 treap
- CCF 201412-2 我100
- Android Studio 下 SVN 的用法
- java随机数
- TortoiseGit安装与配置
- MVP 实现原理及简单案例登陆(二)
- 第一天开始写博客,记录下
- 智能小车 1. 组件
- android的surfaceflinger原理讲解
- android Intent机制详解
- git 查看远程分支、本地分支、删除本地分支,使用git批量删除分支
- MySQL命名、设计及使用规范
- HTTP 状态码
- C++类中的内存对齐