转载请注明本文出自Cym的博客(http://blog.youkuaiyun.com/cym492224103),谢谢支持!
什么是MVP呢?它又和我们常常听到的MVC有什么关系了以及区别呢?
ProgressBar控件和TextView控件,我们判断它是否有网络连接,如果有的话就隐藏 ProgressBar和跳转到MainActivity如果没有网络的话则显示ProgressBar和TextView,TextView则提示用户No internet。就这么简单的一个需求,我们看看如何用MVP模式做这个需求
首先我们看下M层是如何接口写的
- package com.manning.androidhacks.hack020.presenter.model;
- public interface IConnectionStatus {
- boolean isOnline();
- }
- 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;
- }
- }
- package com.manning.androidhacks.hack020.view;
- public interface ISplashView {
- void showProgress();
- void hideProgress();
- void showNoInetErrorMsg();
- void moveToMainView();
- }
- 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很不错呢?觉得不错的同学们就应用到你的实战开发中去吧~!
【关于我们】
才淇(微信公众号:caiqicehua),专注于国内各大互联网公司社会招聘内推。每天更新最新互联网名企(包括但不限于今日头条、网易游戏、BAT、网易互联网、小米、京东、乐视、携程等名企)内推信息,有技术岗、有产品岗、有运营岗、有设计岗、有交互岗、有销售岗,更有其他N多相关岗位!更多内推信息请扫描以下二维码关注查阅。