Android开发MVP模式(解决了View和Model的耦合)
什么是MVP呢?它又和我们常常听到的MVC有什么关系了以及区别呢?
那么说了这么多又关于MVP的东西那么该如何写一个MVP的项目呢?请看下图:
![](/assets/blank.gif)
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 {
- @Override
- public 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();
- @Override
- public 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);
- }
- @Override
- protected 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");
- }
- @Override
- public 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很不错呢?觉得不错的同学们就应用到你的实战开发中去吧~!
Android开发MVP模式(解决了View和Model的耦合)相关推荐
- ym——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的演化版本,也是做为用户界面(用户层)的实现模式,那么相似的 ...
最新文章
- 重新启动正在运行的linux,下面哪个命令行可用来马上重新启动正在运行的Linux系统()。A.restart--delay=0B.reboot-wC.halt-p...
- 零基础可以学python吗-零基础适合学习python吗?
- mysql安装和服务相关问题总结
- SVG动画.animateTransform
- sql select...for update是锁行还是锁表
- 如果关闭一个窗体后激活另一个窗体的事件或方法
- Android 系统(185)---如何使用adb command来设置cpu频率和核数
- Windows Azure Storage (3) Windows Azure Storage Service存储服务之Blob详解(中)
- 耐人寻味的 8 幅Java技术图
- 处理机调度之时间片轮转调度算法实现
- 华为h12m03装系统_华为H22H-03服务器怎么设置从U盘装系统
- 蛇形天线设计和分析(转)
- 我是技术男,也曾创业过,也拿过风投......
- 100以内的三连加减法JAVA_100以内的加减法巧算(转)
- 上海亚商投顾:沪指震荡反弹 游戏、传媒概念股再度大涨
- QuasarRAT-windows下远程控制工具
- linux0.11多任务管理程序阅读注释笔记
- c语言录入信息后无法显示桌面,输入法在桌面不显示,怎么修改能显示在桌面任 – 手机爱问...
- leaflet运动轨迹
- C语言中pthread或Windows API在多线程编程中的基本应用