Android UI框架搭建,MVP,其实就是面向接口编程,通过中间层present代理

Mvp 理解与应用:

个人对MVC 和MVP理解:
M–>model
V–>view Activity
C–>Control


之前开发中我们直接在Activity中就会处理逻辑,导致Activity的类很庞大。
所以google官方推出了MVP模式开发。
M -->model
V–>View Activity
p–>Presenter

V --> P -->M       :v直接下发指令到P 然后调用model处理
V<--(回调)p <--M	  model获取到数据后通过view的接口回调给View

###根据代码在去理解这个模式的写法

2.写了一个登陆功能,用MVP模式:

简单说明:

--LoginIngerface 接口就是Activity里面处理UI的接口。

–ModeInterface 接口就是处理数据的接口,需要传入更新的UI接口。

–ModeImple 类实现ModeInterface接口,进行逻辑处理,根据逻辑处理调用相关的View 回调函数。

--present 只做代理,会持有View的接口,在present里面去初始化(new)一个Mode实例。

--在present中可以直接调用Mode里面的函数,进行封装供 UI层调用。

UI层只需要实现LoginIngerface接口,设置监听即可。UI层就不会处理相关逻辑了

/**
* Created by ybf on 2019/3/29.
* View 的回调接口
*/
public interface LoginIngerface {
  void onSuccess();
  void  onFail();
  String getUserName();
  String getPassWord();
}

/**
* Created by ybf on 2019/3/29.
* 数据处理的接口
*/
public interface ModeInterface {
 void  login(LoginIngerface longin);
}


/**
* Created by ybf on 2019/3/29.
*/
public class ModeImple implements ModeInterface {

  /**
   * 登陆判断逻辑在Mode 里面处理,通过model 接口回调给present
   * Mode 持有view的 引用,(m和v连接启动,都是通过接口方式)
   * @param longin
   */
  @Override
  public void login(LoginIngerface longin) {
      String userName = longin.getUserName();
      String password = longin.getPassWord();
      if(userName.equals("admin") || password.equals("admin")){
          longin.onSuccess();
      }else {
          longin.onFail();
      }
  }
}

package app.ybf.com.mvp.Login;

/**
* Created by ybf on 2019/3/29.
* MVP
* M层定义接口,就是longin的接口,写一个M的实现类。
* present只做代理,不处理逻辑。
*
* Presenter扮演着view和model的中间层的角色。
* 获取model层的数据之后构建view层;
* 也可以收到view层UI上的反馈命令后分发处理逻辑,交给model层做业务操作。
* 它也可以决定View层的各种操作。
*/


public class present {
  public  LoginIngerface longin;
  public ModeInterface modeInterface;


  /**
   * 设置UI监听
   * @param longin   哪个View调用我们,就需要传哪个View的参数
   */
  public void setPresentLinister(LoginIngerface longin){
      this.longin = longin;
      modeInterface = new ModeImple();//new出我们业务处理接口的具体实现类
  }

  public void Login (){
      modeInterface.login(longin);
  }


}

package app.ybf.com.mvp.activity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.Nullable;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import app.ybf.com.mvp.Login.LoginIngerface;
import app.ybf.com.mvp.Login.present;
import app.ybf.com.mvp.MyApplication;
import app.ybf.com.mvp.R;
import app.ybf.com.mvp.Utils.LogUtils;
import app.ybf.com.mvp.Utils.SharedPreferencesHelper;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

/**
* Created by ybf on 2019/3/26.
*/
public class SplashActivity extends Activity implements LoginIngerface {
   @BindView(R.id.et_username)
   EditText etUsername;
   @BindView(R.id.et_password)
   EditText etPassword;
   @BindView(R.id.btn_enter)
   Button btnEnter;
   private String TAG = getClass().getSimpleName();

   private boolean isFrist = false;
   private boolean isopen = false;
   private present mpresent;

   /**
    * 1.进入splashActivity 页面
    * 2.判断是否第一次开启,如果是第一次开启进入guide引导页面
    * 3.如果不是第一次则进入MainActivity
    *
    * @param savedInstanceState
    */
   @Override
   protected void onCreate(@Nullable Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       isFrist = SharedPreferencesHelper.getInstance(this).getBooleanValue("isFrist");
       LogUtils.i(TAG, "isFrist open :" + isFrist);
       if (isFrist) {
           startActivity(new Intent(this, GuideActivity.class));
           finish();
           SharedPreferencesHelper.getInstance(this).putBooleanValue("isFrist", false);
           return;
       }
       setContentView(R.layout.activity_splas);
       ButterKnife.bind(this);
       findViewById(R.id.Ly_splash).setBackgroundResource(R.mipmap.bg_f);

       mpresent = new present();
       mpresent.setPresentLinister(this);


   }

   /**
    * 延时2秒进入主界面
    */
   public void enterMainActivity(int times) {
       new Handler().postDelayed(new Runnable() {
           @Override
           public void run() {
               statrMainActivity();

           }
       }, times);
   }

   public void statrMainActivity() {
       startActivity(new Intent(this, MainActivity.class));
       MyApplication.isopen = true;
       finish();
   }

   @Override
   public void onSuccess() {
       if (MyApplication.isopen) {
           enterMainActivity(0);
       } else {
           enterMainActivity(2000);
       }
   }

   @Override
   public void onFail() {
       Toast.makeText(MyApplication.getInstance(), "密码错误", Toast.LENGTH_SHORT).show();
   }

   @Override
   public String getUserName() {
       return etUsername.getText().toString().trim();
   }

   @Override
   public String getPassWord() {
       return etPassword.getText().toString().trim();
   }

   @OnClick(R.id.btn_enter)
   public void onClick() {
       mpresent.Login();
   }
}

传送门:mvp 实现Android UI框架基础搭建

链接

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FW_G8Z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值