android Mvp简单实用
View 对应于Activity,负责View的绘制以及与用户交互
Model 依然是业务逻辑和实体模型
Presenter 负责完成View于Model间的交互
模拟客户端的登录操作,并实现登录成功与登录失败的回调。
1.bean文件
package com.mvp.bean;
public class UserBean {
private String username;
private String pwd;
public UserBean() {
super();
}
public UserBean(String username, String pwd) {
super();
this.username = username;
this.pwd = pwd;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
2.Model
package com.mvp.model;
import com.mvp.listener.OnLoginListener;
public interface UserModel {
// 登录
void Login(String username, String pwd,OnLoginListener listener);
}
3.Model的实现,OnLoginListener是成功、失败的回调
package com.mvp.model;
import android.annotation.SuppressLint;
import com.mvp.listener.OnLoginListener;
@SuppressLint("HandlerLeak")
public class UserModelImpl implements UserModel {
/**
* 实现业务操作
*/
@Override
public void Login(final String username, String pwd,
final OnLoginListener listener) {
new Thread() {
@Override
public void run() {
if (username.equals("1")) {
listener.onSuccess();
} else if (username.equals("2")) {
listener.onError();
}
}
}.start();
}
}
4.UserView
package com.mvp.view;
public interface UserView {
String getUserName();
String getPwd();
void showDialog(String title);
}
5.Presenter
package com.mvp.presenter; import android.os.Handler; import com.mvp.listener.OnLoginListener;
import com.mvp.model.UserModel;
import com.mvp.model.UserModelImpl;
import com.mvp.view.UserView; public class UserPresenter {
private UserModel userModel;
private UserView userView;
private Handler mHandler = new Handler(); public UserPresenter(UserView userView) {
this.userView = userView;
userModel = new UserModelImpl();
} public void login(String username, String pwd) {
userModel.Login(username, pwd, new OnLoginListener() { @Override
public void onSuccess() {
mHandler.post(new Runnable() { @Override
public void run() {
userView.showDialog("success");
}
});
} @Override
public void onError() {
mHandler.post(new Runnable() { @Override
public void run() {
userView.showDialog("error");
}
});
}
});
}
}
6.Activity文件
package com.mvp.view; import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView; import com.mvp.presenter.UserPresenter; public class MainActivity extends Activity implements UserView, OnClickListener {
private TextView tv_show;
private EditText et_username, et_pwd;
private Button btn_save, btn_clear;
private UserPresenter userPresenter;
private Context context; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
} private void initView() {
userPresenter = new UserPresenter(this);
tv_show = (TextView) findViewById(R.id.tv_show);
et_username = (EditText) findViewById(R.id.et_username);
et_pwd = (EditText) findViewById(R.id.et_pwd);
findViewById(R.id.btn_save).setOnClickListener(this);
findViewById(R.id.btn_clear).setOnClickListener(this);
} @Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_save:
userPresenter.login(getUserName(), getPwd());
break;
case R.id.btn_clear:
break;
}
} @Override
public String getUserName() {
return et_username.getText().toString();
} @Override
public String getPwd() {
return et_pwd.getText().toString();
} @Override
public void showDialog(String title) {
new AlertDialog.Builder(this).setTitle(title)
.setPositiveButton("确定", null).setNegativeButton("取消", null)
.show();
}
}
android Mvp简单实用的更多相关文章
- Android ListView简单实用
layout创建: activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/ ...
- Android FlycoDialog 简单实用的自定义Android弹窗对话框之Dialog篇
效果图镇楼 FlycoDialog是一款非常棒的弹窗对话框处理框架,今天在这里主要讲一下他的自定义弹出对话框的功能,这里以第二幅效果图为例,图片已经放在博客最下方,X号自己随便找一个东西代替吧. ...
- Android ProgressDialog 简单实用
ProgressDialog progressDialog; @SuppressLint("HandlerLeak") Handler handler1 = new Handler ...
- 关于Android对话框简单实用方法总结
要显示一个对话框,首先需要在xx.xml下添加一个Button按钮,并添加一个对应id. 单次点击事件对话框: button.setOnClickListener(new View.OnClickLi ...
- LogCook 一个简单实用的Android日志管理工具
众所周知,日志的管理是软件系统很重要的一部分,千万不可忽略其重要性.完整的日志将会在系统维护中起着异常重要的作用,就好像磨刀不误砍柴工一样,日志就像对系统进行分析的工具,工具便捷了,对系统分析起来就能 ...
- [Android] Android MVP 架构下 最简单的 代码实现
Android MVP 架构下 最简单的 代码实现 首先看图: 上图是MVP,下图是MVC MVP和MVC的区别,在于以前的View层不仅要和model层交互,还要和controller层交互.而 ...
- android mvp高速开发框架介绍(dileber的简单介绍)
今天我为大家介绍一款android mvp框架:dileber(https://github.com/dileber/dileber.git) 官方交流qq群:171443726 我个人qq:2971 ...
- Android MVP模式简单易懂的介绍方式 (一)
Android MVP模式简单易懂的介绍方式 (一) Android MVP模式简单易懂的介绍方式 (二) Android MVP模式简单易懂的介绍方式 (三) 最近正在研究Android的MVP模式 ...
- Android MVP+Retrofit+RxJava实践小结
关于MVP.Retrofit.RxJava,之前已经分别做了分享,如果您还没有阅读过,可以猛戳: 1.Android MVP 实例 2.Android Retrofit 2.0使用 3.RxJava ...
随机推荐
- web.xml中的主要元素说明(listener, filter, servlet)
web.xml中加载的顺序为:context-param ---> listener ---> filter ---> servlet. listener:主要针对的是对象的操作,如 ...
- 微信SDK导入报错 Undefined symbols for architecture i386:"operator delete[](void*)", referenced from:
异常信息: Undefined symbols for architecture i386: "operator delete[](void*)", referenced fro ...
- VB.NET 结构(Structure)和类(Class)的区别
类是我们用来构造 VB.NET 应用程序时的最基本的编程结构了. 那结构与类有什么相似之处与不同之处呢? 结构和类, 相同之处是都含有成员,包括构造函数.方法.属性.字段.常量.枚举和事件,都可以实现 ...
- linux学习笔记之文件类型,及目录介绍
引用A:http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/20/3033131.html 引用B:http://www.cnblogs.c ...
- arm str 指令
str 指令格式: str{条件} 1源寄存器 ,2存储器地址 eg: str r0,[r1],#8;将r0中的数值赋值给r1,然后在r1地址上+立即数8,再写入r1中: str r0,[r1,#8] ...
- MYSQL5.6数据库ZIP安装以及VS中使用注意事项
先挂资源,下载地址: http://download.softagency.net/MySQL/Downloads/. 找到MYSQL5.6,两个版本看系统而定我下的是64位的:http://down ...
- inflate, findViewById与setContentView的区别与联系
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentV ...
- 解决ERROR C2011: 'FD_SET' : 'STRUCT' TYPE REDEFINITION问题
在socket编程的过程中头文件中 #include <windows.h> #include "stdafx.h" #include "WinSock2.h ...
- hdu 5823 color II 状压dp
题目链接 给n个点 n<=18. 然后给出它们两两之间是否有边相连. 问你这个图的所有子集,最少要用多少种颜色来染色, 如果两个点相连, 那么这两个点不能染同样的颜色. 先预处理出所有的点独立集 ...
- Apache+php+mysql win7 64位安装的几个注意事项
网上一堆安装教程,所以不赘述具体安装过程,只说注意事项.新手推荐phpstudy 如果想单个安装,那么以下是我两三年内多次在win winserver环境下配置Apache环境的一点注意事项,下载连接 ...