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 字体相关的内容还比较多的.有时候其实我们只需要调整一下属性就可以满足设计师的需求,或者是一个退后的方案(毕竟有发版的时间卡住了),有一些效果可以大概满足需求. 那么本文 ...
随机推荐
- 整理+学习《骆昊-Java面试题全集(上)》
★可以关注微信公众号,了解更多技术和行业信息 2013年年底的时候,我看到了网上流传的一个叫做<Java面试题大全>的东西,认真的阅读了以后发现里面的很多题目是重复且没有价值的题目,还有不 ...
- 《你不知道的JavaScript(中卷)》读书笔记
中卷有点无聊,不过也是有干货的,但是好像要背一下的样子.不过作者大大都夸我是“优秀的开发人员”了,肯定要看完呀~~ 开发人员觉得它们太晦涩,很难掌握和运用,弊(导致bug)大于利(提高代码可读性).这 ...
- Net Core集成Exceptionless分布式日志功能以及全局异常过滤
Net Core集成Exceptionless分布式日志功能以及全局异常过滤 相信很多朋友都看过我的上篇关于Exceptionless的简单入门教程[asp.Net Core免费开源分布式异常日志收集 ...
- while true 死循环判断端口按顺序启动应用
需求:spring微服务应用启动较慢并且要求一个应用启完才能启第二个应用. 思路:加了个while true 死循环判断端口启动了才启下一个应用. 执行方式:/appupgrade/spring_cl ...
- OAuth2.0介绍
OAuth2.0介绍 OAuth2.0简介 四种许可类型 2.1. 授权码许可(Authorization Code) 2.2. 隐式许可(Implicit) 2.3. 资源拥有者密码凭据许可(Res ...
- redis 系列1 linux下安装说明
一. 安装环境 操作系统:centos 7 ,redis版本4.06,客户端windows 7 ,vs2015. 1.1 安装前的条件 yum -y install gcc-c++ 判断是否安装了gc ...
- Java代码更改shape和selector文件的颜色值
Android里面经常会使用shape或者selector来定制一些View的背景.那么如果想要动态更改shape或者seletor文件中的颜色值,该怎么处理呢? 一.Java代码更改shape的颜色 ...
- How Tomcat works — 二、tomcat启动(1)
主要介绍tomcat启动涉及到的一些接口和类. 目录 概述 tomcat包含的组件 server和service Lifecycle Container Connector 总结 概述 tomcat作 ...
- 深入理解Java虚拟机阅读心得(三)
Java中提倡的自动内存管理最终可以归结为自动化的解决两个问题: 给对象分配内存 回收分配给对象的内存 先说说回收这一方面的两个主要知识点 一.垃圾收集算法 1.标记-清理算法 首先标记出所有需要回收 ...
- Perl的IO操作(2):更多文件句柄模式
open函数除了> >> <这三种最基本的文件句柄模式,还支持更丰富的操作模式,例如管道.其实bash shell支持的重定向模式,perl都支持,即使是2>&1 ...