Android为TV端助力 MVP设计模式!
实现原理:
MainActivity 用来更新UI,和显示业务逻辑的结果!
LoginPresenterCompl 用来处理 业务逻辑
ILoginPresenter 业务处理类抽象出来的接口
ILoginView activity抽象出来的接口
1.为什么要把activity的UI更新方法抽象出来?
因为你的项目不可能只有一个activity吧,如果想要每个activity都用MVP模式,那么就把共有的方法抽象出来就可以的
2.为什么要把业务处理类抽象出来?
同理,每个activity的业务处理逻辑肯定是不一样的,我们可以使用java的特性,即重写,虽然每个业务类的方法名,参数,返回类型相同,但是我们可以在里面处理不同的逻辑
比如A在里面处理吃西瓜,B在里面处理吃梨子,返回的都是水果类型!
3.为什么要用MVP模式?
当你的代码量很多的时候,如果不采用较好的框架,后续维护和查找就会显得很乱,自己都不知道从来找,出现问题第一时间也没办法分析出来,总之一个好的APK,最好是在前期采用好的框架搭建!
首先是activity的代码:
ublic class MainActivity extends Activity implements ILoginView{
private Button button1;
private Button button2;
private EditText edit1;
private EditText edit2;
private ILoginPresenter presenterCompl;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
presenterCompl = new LoginPresenterCompl(this);
button1 = (Button)findViewById(R.id.button1);
button2 = (Button)findViewById(R.id.button2);
edit1 = (EditText)findViewById(R.id.edit1);
edit2 = (EditText)findViewById(R.id.edit2);
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
presenterCompl.doLogin(edit1.getText().toString(), edit2.getText().toString());
}
});
button2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
presenterCompl.clear();
}
});
}
@Override
public void onClearText() {
edit1.setText("");
edit2.setText("");
Toast.makeText(getApplicationContext(), "clear", 1).show();
}
@Override
public void onLoginResult(Boolean result, int code) {
if(result){
Toast.makeText(getApplicationContext(), "登录成功", 1).show();
}else{
Toast.makeText(getApplicationContext(), "登录失败", 1).show();
}
}
}
他实现了ILoginView接口,这个接口定义的两个方法,一个用来清除edittext的数据,一个用来显示逻辑任务类的处理结果,结果的方法可以根据自己公司具体业务需求来定!
public interface ILoginView {
public void onClearText();
public void onLoginResult(Boolean result, int code);
}
接下来是逻辑任务类LoginPresenterCompl
public class LoginPresenterCompl implements ILoginPresenter{
private ILoginView mView;
private User user;
@Override
public void clear() {
mView.onClearText();
}
@Override
public void doLogin(String name, String password) {
boolean result = false;
int code = 0;
if(name.equals(user.getName())&&password.equals(user.getPassword())){
result = true;
code = 1;
}else{
result = false;
code = 0;
}
mView.onLoginResult(result, code);
}
public LoginPresenterCompl(ILoginView view) {
this.mView = view;
user = new User("000","123456");
}
}
这个类实现了ILoginPresenter接口,因为你以后项目的逻辑任务肯定不止一种情况,所以我们抽象出来共同的方法
只要实现这个接口就行,具体的任务逻辑看自己公司需要,比如我们公司采用的登录验证,在activity中获得用户输入
的账号和密码,然后跟实体类的数据进行对比(注意这里的实体类是为了方便才这样写的,实际情况应该是从数据库中
或者从网络请求中获取数据然后保存到实体类,这里就不具体说了),最后调用activity里面抽象出来的更新UI的方法,
实际上就是把结果返回给activity的,因为activity实现了这个这个接口!
public interface ILoginPresenter {
public void clear();
public void doLogin(String name, String password);
}
实体类:
public class User {
private String name;
private String password;
public User(String name,String pwd) {
this.name = name;
this.password = pwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [name=" + name + ", password=" + password + "]";
}
}
Android为TV端助力 MVP设计模式!的更多相关文章
- Android为TV端助力 转载:android MVC设计模式
Controller控制器 import android.app.Dialog; import android.app.ProgressDialog; import android.os.Bundle ...
- Android为TV端助力 转载:RecyclerView分页加载
package com.android.ryane.pulltoloaddata_recyclerview; import android.os.Handler;import android.os.L ...
- Android为TV端助力(转载)
作者地址http://www.jianshu.com/u/63915ef020e2 针对Android Tv的自定义RecyclerView 作者 wenju_song 关注 2016.12.09 1 ...
- Android为TV端助力 自定义通知栏
package com.example.mvp; import cn.ljuns.temperature.view.TemperatureView;import presenter.ILoginPre ...
- Android为TV端助力 转载:android自定义view实战(温度控制表)!
效果图 package cn.ljuns.temperature.view; import com.example.mvp.R; import android.content.Context;impo ...
- Android为TV端助力 不需要Socket的跨进程推送消息AIDL!
上篇介绍了跨进程实时通讯http://www.cnblogs.com/xiaoxiaing/p/5818161.html 但是他有个缺点就是服务端无法推送消息给客户端,今天这篇文章主要说的就是服务器推 ...
- Android为TV端助力之Webview与JS双向交互
package com.hhzt.iptv.adservice; import android.app.Activity;import android.graphics.Bitmap;import a ...
- Android为TV端助力之WebView开发踩坑一
在Android清单配置文件里面 自定义application时,在4.4系统上面不能加上一个属性,见下图 否则界面将不会显示任何数据,在更高或者更低的系统上面没有测试!
- Android为TV端助力:(转载)修改TextView字体样式
一.开篇 因为 Android 字体相关的内容还比较多的.有时候其实我们只需要调整一下属性就可以满足设计师的需求,或者是一个退后的方案(毕竟有发版的时间卡住了),有一些效果可以大概满足需求. 那么本文 ...
随机推荐
- Python图像处理库PIL中图像格式转换
o 在数字图像处理中,针对不同的图像格式有其特定的处理算法.所以,在做图像处理之前,我们需要考虑清楚自己要基于哪种格式的图像进行算法设计及其实现.本文基于这个需求,使用python中的图像处理库PIL ...
- 安装MySQL时候最后一步报无法定位程序输入点fesetround于动态链接库MSVCR120.dll
今天在装MySQL时到最后一步出现了一个问题[报无法定位程序输入点fesetround于动态链接库MSVCR120.dll]这是由什么原因引起的呢,其实是缺少一个vcredist_x64.exe插件 ...
- Struts2框架(4)---Action类访问servlet
Action类访问servlet Action类有三种方式servlet: (1)间接的方式访问Servlet API ---使用ActionContext对象 (2) 实现接口,访问Action ...
- 缓存日志截取字段上传FTP
#!/bin/bash awk '{print $3,$4,$5,$6,$9,$11,$12,$14,$15,$18}' /usr/local/tcacheserver/var/log/traffic ...
- 转:centos7搭建jenkins小记
转自:https://segmentfault.com/a/1190000007086764 安装java环境 1.查看服务器版本 centos7,继续. cat /etc/redhat-releas ...
- Deeplearning.ai课程笔记--汇总
从接触机器学习就了解到Andrew Ng的机器学习课程,后来发现又出来深度学习课程,就开始在网易云课堂上学习deeplearning.ai的课程,Andrew 的课真是的把深入浅出.当然学习这些课程还 ...
- 【Python】正则表达式纯代码极简教程
<Python3正则表达式>文字版详细教程链接:https://www.cnblogs.com/leejack/p/9189796.html ''' 内容:Python3正则表达式 日期: ...
- Python作用域详述
作用域是指变量的生效范围,例如本地变量.全局变量描述的就是不同的生效范围. python的变量作用域的规则非常简单,可以说是所有语言中最直观.最容易理解的作用域. 在开始介绍作用域之前,先抛一个问题: ...
- rsync+inotify实现全网自动化数据备份-技术流ken
rsync简介 “rsync是linux系统下的数据镜像备份工具.使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH.rsync主机同步” rsync的功能和特点 ...
- 【转载】 PhpStudy修改Apache的端口号
phpStudy是一个PHP调试环境的程序集成包.该程序包集成最新的Apache+PHP+MySQL+phpMyAdmin+ZendOptimizer,一次性安装,无须配置即可使用,是非常方便.好用的 ...