MVP 实现原理及简单案例登陆(二)
2016-09-13 14:03
211 查看
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.javapublic 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(); 4000 /** * 跳转到主界面 */ 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
具体实现详见代码
执行流程
Created with Raphaël 2.1.0开始点击登陆调用LoginActivity->onClick//点击事件调用LoginPresenter->login()//登陆方法调用LoginView->getParam(1)、showProgress()、dismissProgress()//登陆方法中的相关操作登陆成功?调用LoginView->jump2MainPager()//跳转到主页结束调用LoginView->showToast("账号或密码错误")//提示登录失败信息yesnoView层抽取原则
当然针对于当前的简单案例,接下来的文章会对复杂案例进行抽取,包括各种细节会做详细说明1.需要初始化的信息: setOnclickListener、addTextChangedListener诸如此类的,都要抽取View接口方法,方便Presenter初始化时调用(详见LoginPresenter类)。
/** * 添加文本改变的监听 */ @Override public void addTextChangedListener()
2.显示/取消加载进度框、显示提示信息、获取上下文信息
/** * @return 获取上下文 */< b6d8 /span> 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相关文章推荐
- Redis简单案例(三) 连续登陆活动的简单实现
- MVP的简单实现(本地登陆)
- Java 实现简单登陆案例
- 单点登陆原理与简单实现
- 一个简单登陆示例的MVC和MVP实现
- mvp 简单的案例, mvp实现登录及注册 分为moudle数据层 activity视图v层 Presenter逻辑层
- 一个简单登陆示例的MVC和MVP实现
- android-async-http开源项目的GET方式或POST方式实现登陆案例简单Demo
- 一个简单登陆示例的MVC和MVP实现
- CString实现原理简单介绍
- 转: 加壳原理与简单实现加壳(delphi源码)
- 一个简单的登陆页面实现
- 用MATLAB的GUI实现文本的简单加密原理
- js实现一个简单登陆框
- 也谈WEB打印(二):简单的分析一下IE的打印原理并实现简单的打印和预览
- Ajax 弹出登陆框的实现原理
- ORM,ASP.NET中ORM学习,ASP.NET中ORM学习心得,WEB2.0中ORM实现原理,Asp.net简单ORM示例源码详细讲解,Asp.net2.0:如何使用ObjectDataSource(配合ORM )
- 也谈WEB打印(二):简单的分析一下IE的打印原理并实现简单的打印和预览
- 加壳原理与简单实现加壳(delphi源码)
- 用Cache简单的实现单点登陆