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简单实用的更多相关文章

  1. Android ListView简单实用

    layout创建: activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/ ...

  2. Android FlycoDialog 简单实用的自定义Android弹窗对话框之Dialog篇

    效果图镇楼   FlycoDialog是一款非常棒的弹窗对话框处理框架,今天在这里主要讲一下他的自定义弹出对话框的功能,这里以第二幅效果图为例,图片已经放在博客最下方,X号自己随便找一个东西代替吧.  ...

  3. Android ProgressDialog 简单实用

    ProgressDialog progressDialog; @SuppressLint("HandlerLeak") Handler handler1 = new Handler ...

  4. 关于Android对话框简单实用方法总结

    要显示一个对话框,首先需要在xx.xml下添加一个Button按钮,并添加一个对应id. 单次点击事件对话框: button.setOnClickListener(new View.OnClickLi ...

  5. LogCook 一个简单实用的Android日志管理工具

    众所周知,日志的管理是软件系统很重要的一部分,千万不可忽略其重要性.完整的日志将会在系统维护中起着异常重要的作用,就好像磨刀不误砍柴工一样,日志就像对系统进行分析的工具,工具便捷了,对系统分析起来就能 ...

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

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

  7. android mvp高速开发框架介绍(dileber的简单介绍)

    今天我为大家介绍一款android mvp框架:dileber(https://github.com/dileber/dileber.git) 官方交流qq群:171443726 我个人qq:2971 ...

  8. Android MVP模式简单易懂的介绍方式 (一)

    Android MVP模式简单易懂的介绍方式 (一) Android MVP模式简单易懂的介绍方式 (二) Android MVP模式简单易懂的介绍方式 (三) 最近正在研究Android的MVP模式 ...

  9. Android MVP+Retrofit+RxJava实践小结

    关于MVP.Retrofit.RxJava,之前已经分别做了分享,如果您还没有阅读过,可以猛戳: 1.Android MVP 实例 2.Android Retrofit 2.0使用 3.RxJava ...

随机推荐

  1. 【.NetRemoting-2】2015.09.17

    [Remoting架构] [1]是.NetFramework的一个重要组成 [2]框架的两个重要特性 [A]基本实现[B]可扩展/可定制 [各个组成部分] [1][客户端,客户端应用程序域] [组成] ...

  2. 认识Java里面的Thread

    在一个特定的主线程执行的过程中,如果我们还需要在主线程的过程中插播一个线程,做其他动作.那么我们就可以利用Java的Thread类,创建一个新的线程. 一:线程简单实现的三种方式 (1)第一种创建线程 ...

  3. Android 有用的快捷键

    The powerful Android Studio 08 Jun 2016 Android Studio is the official tool for Android development ...

  4. xstream对象xml互转

    1.引入jar包 xpp3_min-1.1.4c.jarxstream-1.4.8.jar 2.建立java bean package com.jdw.bean; import java.util.A ...

  5. ASCII、ANSI、GB2312、Unicode、UTF-8之间的关系

    1.ASCII码: ASCII(American Standard Code for Information Interchange,美国信息互换标准代码)是基于拉丁字母的一套电脑编码系统.它主要用于 ...

  6. 【写一个自己的js库】 4.完善跨浏览器事件操作

    1.阻止冒泡. function stopPropagation(event){ event = event || getEvent(event); if(event.stopPropagation) ...

  7. 手动升级Delphi控件时,修改inc文件的办法

    以MustangPeakCommonLib.exe控件为例,想让它支持Delphi2010,就需要在D:\Program Files\Common Library\Mustangpeak\Common ...

  8. C# 弗洛伊德(Floyd)算法

    弗洛伊德(Floyd)算法 主要是用于计算图中所有顶点对之间的最短距离长度的算法,如果是要求某一个特定点到图中所有顶点之间的最短距离可以用;        ;    ;    ;            ...

  9. 利用COM组件IPicture读取jpg、gif、bmp图片文件数据和显示图片

    1.读取图片数据 函数原型:bool LoadImage(const char *pName, unsigned char *pBitData); 函数功能,读取pName指向的图片文件的位图数据 b ...

  10. [Leetcode][Python]54: Spiral Matrix

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 54: Spiral Matrixhttps://leetcode.com/p ...