ym——Android开发MVP模式(解决了View和Model的耦合)
转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持!
什么是MVP呢?它又和我们常常听到的MVC有什么关系了以及区别呢?
那么说了这么多又关于MVP的东西那么该如何写一个MVP的项目呢?请看下图:
ProgressBar控件和TextView控件,我们判断它是否有网络连接,如果有的话就隐藏 ProgressBar和跳转到MainActivity如果没有网络的话则显示ProgressBar和TextView,TextView则提示用户No internet。就这么简单的一个需求,我们看看如何用MVP模式做这个需求
首先我们看下M层是如何接口写的
package com.manning.androidhacks.hack020.presenter.model;public interface IConnectionStatus {boolean isOnline();
}
然后看看实现(我们主要是看MVP模式的使用,所以在此就不做网络连接的检查了,模拟一个状态)
package com.manning.androidhacks.hack020.presenter.model.impl;import com.manning.androidhacks.hack020.presenter.model.IConnectionStatus;public class ConnectionStatus implements IConnectionStatus {@Overridepublic boolean isOnline() {// TODO: Here we should place the code to check the connectivity.return true;}}
然后我们在来看看V的接口
package com.manning.androidhacks.hack020.view;public interface ISplashView {void showProgress();void hideProgress();void showNoInetErrorMsg();void moveToMainView();
}
以及V的实现
package com.manning.androidhacks.hack020.view.impl;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.TextView;import com.manning.androidhacks.hack020.R;
import com.manning.androidhacks.hack020.presenter.SplashPresenter;
import com.manning.androidhacks.hack020.view.ISplashView;public class SplashActivity extends Activity implements ISplashView {private TextView mTextView;private ProgressBar mProgressBar;private SplashPresenter mPresenter = new SplashPresenter();@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.splash);mPresenter.setView(this);mTextView = (TextView) findViewById(R.id.splash_text);mProgressBar = (ProgressBar) findViewById(R.id.splash_progress_bar);}@Overrideprotected void onResume() {super.onResume();mPresenter.didFinishLoading();}public void showProgress() {mProgressBar.setVisibility(View.VISIBLE);}public void hideProgress() {mProgressBar.setVisibility(View.INVISIBLE);}public void showNoInetErrorMsg() {mTextView.setText("No internet");}@Overridepublic void moveToMainView() {startActivity(new Intent(this, MainActivity.class));}
}
最后我们来看看P层是如何控制他们的逻辑的:
public class SplashPresenter {private IConnectionStatus mConnectionStatus;private ISplashView mView;public SplashPresenter() {this(new ConnectionStatus());}public SplashPresenter(IConnectionStatus connectionStatus) {mConnectionStatus = connectionStatus;}public void setView(ISplashView view) {this.mView = view;}protected ISplashView getView() {return mView;}public void didFinishLoading() {ISplashView view = getView();if (mConnectionStatus.isOnline()) {view.showProgress();view.moveToMainView();} else {view.hideProgress();view.showNoInetErrorMsg();}}
}
好,我个人理解,就是把逻辑层抽出来成P层,要是遇到需求逻辑上的更改就可以只需要修改P层了或者遇到逻辑上的大概我们可以直接从写一个P也可以,现在我看过的大多数开发把所有的东西都写在了Activity里面这样一来遇到改频繁改需求的时候,Activity里面就会被写的乱糟糟,所以想到了这个MVP模式希望能帮助到大家 ,大家是不是觉得MVP很不错呢?觉得不错的同学们就应用到你的实战开发中去吧~!
ym——Android开发MVP模式(解决了View和Model的耦合)相关推荐
- Android开发MVP模式(解决了View和Model的耦合)
转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持! 什么是MVP呢?它又和我们常常听到的MVC有什么关系了以及区别呢? MVP 是从经典的 ...
- Android开发MVP模式--项目实战
1 前言 苏宁+App是苏宁易购集团零售云研发中心分销研发中心主要产品之一,由于项目处于初期阶段,业务逻辑复杂,导致业务需求变动快,常常在开发甚至测试过程中出现界面或者后台接口调整的情况. App客户 ...
- Android之MVP模式
今天来看看Android的MVP模式,使用框架开发,开发速度以及代码的目录结构会别有一番风格. Google的demo:https://github.com/googlesamples/android ...
- android viewpager fragment传值,Android开发中如何解决Fragment +Viewpager滑动页面重复加载的问题...
前言 之前在做一个Viewpager上面加载多个Fragment时总会实例化已经创建好的Fragmnet对象类似 viewPager.setAdapter(new FragmentPagerAdapt ...
- android开发mvp,Android开发模式之MVP
一. 什么是MVP MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示. 二.MVP与MVC ...
- android 适合mvp模式,Android中的MVP:如何使Presenter层系统化?
MVP(Model View Presenter)模式是著名的 MVC(Model View Controller)的衍生物,并且是 Android 应用程序中管理表示层的***的模式之一. 这篇文章 ...
- Android之MVP 模式:简单易懂的介绍方式
转载:https://segmentfault.com/a/1190000003927200 Android MVP Pattern Android MVP 模式1 也不是什么新鲜的东西了,我在自己的 ...
- android 的MVP模式的介绍
当下开发中使用最多的最普遍的有三种模式就是MVC,MVP和MVVM.相信大家对这三个名词并不陌生,他们在我们的开发用应用的及其广泛,今天我就浅谈一下我了解的MVP设计模式.说MVP之前不得不谈谈MVC ...
- android MVP连接服务器,Android之MVP模式实现登陆和网络数据加载
MVP简介 相信你们对 MVC 都是比较熟悉了:M-Model-模型.V-View-视图.C-Controller-控制器,MVP做为MVC的演化版本,也是做为用户界面(用户层)的实现模式,那么相似的 ...
最新文章
- 谷歌浏览器扩展程序XDM_请立即更新您的谷歌Chrome浏览器 获取重要的安全补丁程序...
- 网站关键词优化有哪些技巧?
- 第二十四章:页面导航(五)
- zabbix学习小结
- 对‘TIFFReadDirectory@LIBTIFF_4.0’未定义的引用
- Java 8 Stream中间操作(方法)示例
- 窗体案例:注册 登陆 主界面 c# 1613533126
- FASTQ format
- 获取当地天气_6 点起来看天气预报?正经人谁看天气预报,原来是为了看她
- 47. Python socket编程 2
- 阿里云CentOS环境之docker安装,启动,加速器,docker-compose(十四)
- 惠普服务器装系统ESXI,在惠普服务器上安装ESXI 5.5卡在LSI_MR3.V00的解决方案
- Binutils - c++filt工具
- 无法设置默认打开方式怎么办
- 软件测试学习资料大全
- 5、流程变量Variables
- HPE MSA存储的高性能连接解决方案
- 一个屌丝程序猿的人生(五十一)
- 高精度地图,从入门到入行
- 寺库拟私有化:报价较发行价缩水75%,趣店为第一大股东