2018-3-15 mvp模式修改。(写了一个简单的demo)

看了个mvpdemo 感觉,很多例子接口太多,感觉不是很好。mvp 模式就修改了一下,添加了EventBus 框架,处理了一部分接口。

Android MVP 模式_第1张图片

一般都是登录界面说,

<?xml version="1.0" encoding="utf-8"?>                    

布局如上然后就是到activity了。

package com.sys.lostpro;import android.app.ProgressDialog;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.EditText;import android.widget.TextView;import com.sys.lostpro.mvplost.model.entity.AppMangerInfo;import com.sys.lostpro.mvplost.model.eventbusmsg.AppUserInfoMsg;import com.sys.lostpro.mvplost.model.eventbusmsg.ExceptionInfo;import com.sys.lostpro.mvplost.model.eventbusmsg.ProgressInfo;import com.sys.lostpro.mvplost.presenter.compl.IMainViewCompl;import com.sys.lostpro.mvplost.presenter.ipresenter.IMainView;import org.greenrobot.eventbus.EventBus;import org.greenrobot.eventbus.Subscribe;import org.greenrobot.eventbus.ThreadMode;import butterknife.BindView;import butterknife.ButterKnife;import butterknife.OnClick;public class MainActivity extends AppCompatActivity {    @BindView(R.id.edit_username)    EditText editUsername;    @BindView(R.id.edit_password)    EditText editPassword;    @BindView(R.id.but_login)    TextView butLogin;    private IMainView iMainView;    @BindView(R.id.msg)    TextView msg;    private ProgressDialog progressDialog;    @Subscribe(threadMode = ThreadMode.MAIN)    public void showProgress(ProgressInfo messageEvent) {        if (messageEvent != null && messageEvent.getShowProgress() == 1) {            if (progressDialog == null) {                progressDialog = new ProgressDialog(MainActivity.this);                progressDialog.setMessage("加载中");                progressDialog.create();                progressDialog.setCanceledOnTouchOutside(false);                progressDialog.setCancelable(false);                progressDialog.show();            } else {                if (!progressDialog.isShowing()) {                    progressDialog.show();                }            }        } else {            if (progressDialog != null && progressDialog.isShowing()) {                progressDialog.dismiss();            }        }    }    @Subscribe(threadMode = ThreadMode.MAIN)    public void subAppUserInfo(AppUserInfoMsg messageEvent) {        if (messageEvent != null) {            if (messageEvent.getEntity() instanceof AppMangerInfo) {                AppMangerInfo appUserInfo = (AppMangerInfo) messageEvent.getEntity();                msg.setText("欢迎" + appUserInfo.getUsername() + "登录");            } else if (messageEvent.getEntity() instanceof ExceptionInfo) {                msg.setText("发生异常");            } else {            }        }    }    @OnClick(R.id.but_login)    public void but_login(View view) {        iMainView.login(editUsername.getText().toString(), editPassword.getText().toString());    }    @Override    protected void onDestroy() {        super.onDestroy();        EventBus.getDefault().unregister(this);    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ButterKnife.bind(this);        EventBus.getDefault().register(this);        iMainView = new IMainViewCompl();    }}

Activity 里面引用了EventBus 的框架,具体用法就是 注册,监听,注销。 这里 好似mvp 模式里创建一下接口Presenter 的实现类。 里面我添加了一个对话框,模拟登录,

接下来就是 IMainPresenterCompl 实现类,

package com.sys.lostpro.mvplost.presenter.compl;import android.os.Handler;import android.text.TextUtils;import android.util.Log;import com.sys.lostpro.mvplost.model.eventbusmsg.ProgressInfo;import com.sys.lostpro.mvplost.model.modelimpl.LoginModel;import com.sys.lostpro.mvplost.model.modelimpl.LoginModelImpl;import com.sys.lostpro.mvplost.presenter.ipresenter.IMainView;import org.greenrobot.eventbus.EventBus;public class IMainViewCompl implements IMainView {    private LoginModel loginModel;    public IMainViewCompl() {        loginModel = new LoginModelImpl();    }    /**     * 处理逻辑了。     *     * @param username     * @param password     */    @Override    public void login(final String username, final String password) {        Log.e("login", username + password);        if (TextUtils.isEmpty(username) || TextUtils.isEmpty(password)) {            return;        } else {            EventBus.getDefault().post(new ProgressInfo(1));            new Handler().postDelayed(new Runnable() {                @Override                public void run() {                    loginModel.checkUser(username, password);                }            }, 5000);        }    }}
   

里面相当于一个拦截器的思路,真实处理是loginModel 的实现。

package com.sys.lostpro.mvplost.model.modelimpl;import com.sys.lostpro.mvplost.model.entity.AppMangerInfo;import com.sys.lostpro.mvplost.model.eventbusmsg.AppUserInfoMsg;import com.sys.lostpro.mvplost.model.eventbusmsg.ExceptionInfo;import com.sys.lostpro.mvplost.model.eventbusmsg.ProgressInfo;import org.greenrobot.eventbus.EventBus;public class LoginModelImpl implements LoginModel {    @Override    public void checkUser(String username, String password) {        if (username.equals("admin") && password.equals("admin")) {            EventBus.getDefault().post(new AppUserInfoMsg(1, "appmanager", new AppMangerInfo(username, password)));        } else {            EventBus.getDefault().post(new AppUserInfoMsg(404, "excetption", new ExceptionInfo(404, "null exception")));        }        EventBus.getDefault().post(new ProgressInfo(2));    }}
这里用admin 模拟了登录名,当成功登录时候,发送消息,过去,主页接口,处理显示出来,取消对话框。

Android MVP 模式_第2张图片 

EventBus 消息可以封装三个出来,实现主页 控制接收数据, 主页主要接收两种类型消息,一种对话框显示 隐藏消息,一种实际处理逻辑相关的消息。

Demo 项目会一直优化下,反正当练手。 

连接 :点击打开链接

更多相关文章

  1. Android 抽象回调函数以及接口回调更新UI
  2. [置顶] Android WebKit消息处理(二)Touch事件的分发处理
  3. [Android]RecyclerView基本使用+adapter回调接口实现点击事件
  4. Android学习笔记之网络接口(Http接口,Apache接口,Android接口)
  5. Android消息队列(三)--多线程与消息处理
  6. Android的联通性---USB主机模式(一)

随机推荐

  1. 源码解析Android中View的measure量算过程
  2. [置顶] Android(安卓)内存泄漏
  3. Android转场动画和共享元素动画兼容5.0以
  4. Android中基于心知天气API获取天气信息
  5. Android(4.2) Sensors 学习——G-sensor,
  6. Android中我为什么发不了邮件--Android邮
  7. Android(安卓)TV 焦点移动飞框的实现
  8. android 新浪微博客户端的表情功能的实现
  9. Android(安卓)Studio 基础 之 一键快速实
  10. Android心得3--拨号器