安卓MVP的简单使用
来源:互联网 发布:c语言三种循环结构 编辑:程序博客网 时间:2024/06/05 10:15
MVP模式的核心思想:
MVP把Activity中的UI逻辑抽象成View接口,把业务逻辑抽象成Presenter接口,Model类还是原来的Model。
这就是MVP模式,现在这样的话,Activity的工作的简单了,只用来响应生命周期,其他工作都丢到Presenter中去完成。从上图可以看出,Presenter是Model和View之间的桥梁,为了让结构变得更加简单,View并不能直接对Model进行操作,这也是MVP与MVC最大的不同之处。
MVP模式的作用
MVP的好处都有啥,谁说对了就给他 KIRA!!(<ゝω·)☆
1.分离了视图逻辑和业务逻辑,降低了耦合2.Activity只处理生命周期的任务,代码变得更加简洁3.视图逻辑和业务逻辑分别抽象到了View和Presenter的接口中去,提高代码的可阅读性4.Presenter被抽象成接口,可以有多种具体的实现,所以方便进行单元测试5.把业务逻辑抽到Presenter中去,避免后台线程引用着Activity导致Activity的资源无法被系统回收从而引起内存泄露和OOM
做一个简单的登录功能
简单的分个包
LoginActivity
public class LoginActivity extends ActionBarActivity implements ILoginView, View.OnClickListener { private EditText editUser; private EditText editPass; private Button btnLogin; private Button btnClear; ILoginPresenter loginPresenter; private ProgressBar progressBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //find view editUser = (EditText) this.findViewById(R.id.et_login_username); editPass = (EditText) this.findViewById(R.id.et_login_password); btnLogin = (Button) this.findViewById(R.id.btn_login_login); btnClear = (Button) this.findViewById(R.id.btn_login_clear); progressBar = (ProgressBar) this.findViewById(R.id.progress_login); //set listener btnLogin.setOnClickListener(this); btnClear.setOnClickListener(this); //init loginPresenter = new LoginPresenterCompl(this); loginPresenter.setProgressBarVisiblity(View.INVISIBLE); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.btn_login_clear: loginPresenter.clear(); break; case R.id.btn_login_login: loginPresenter.setProgressBarVisiblity(View.VISIBLE); btnLogin.setEnabled(false); btnClear.setEnabled(false); loginPresenter.doLogin(editUser.getText().toString(), editPass.getText().toString()); break; } } @Override public void onClearText() { editUser.setText(""); editPass.setText(""); } @Override public void onLoginResult(Boolean result, int code) { loginPresenter.setProgressBarVisiblity(View.INVISIBLE); btnLogin.setEnabled(true); btnClear.setEnabled(true); if (result){ Toast.makeText(this,"Login Success",Toast.LENGTH_SHORT).show(); startActivity(new Intent(this, HomeActivity.class)); } else Toast.makeText(this,"Login Fail, code = " + code,Toast.LENGTH_SHORT).show(); } @Override public void onSetProgressBarVisibility(int visibility) { progressBar.setVisibility(visibility); }}
ILoginPresenter
public interface ILoginPresenter { void clear(); void doLogin(String name, String passwd); void setProgressBarVisiblity(int visiblity);}
LoginPresenterCompl
public class LoginPresenterCompl implements ILoginPresenter { ILoginView iLoginView; IUser user; Handler handler; public LoginPresenterCompl(ILoginView iLoginView) { this.iLoginView = iLoginView; initUser(); handler = new Handler(Looper.getMainLooper()); } @Override public void clear() { iLoginView.onClearText(); } @Override public void doLogin(String name, String passwd) { Boolean isLoginSuccess = true; final int code = user.checkUserValidity(name,passwd); if (code!=0) isLoginSuccess = false; final Boolean result = isLoginSuccess; handler.postDelayed(new Runnable() { @Override public void run() { iLoginView.onLoginResult(result, code); } }, 3000); } @Override public void setProgressBarVisiblity(int visiblity){ iLoginView.onSetProgressBarVisibility(visiblity); } private void initUser(){ user = new UserModel("mvp","mvp"); }}
ILoginView
public interface ILoginView { public void onClearText(); public void onLoginResult(Boolean result, int code); public void onSetProgressBarVisibility(int visibility);}
阅读全文
0 0
- 安卓MVP的简单使用
- EasyAndroid-MVP安卓轻松使用MVP
- MVP的简单使用
- MVP的简单使用
- MVP的简单使用
- mvp框架的简单使用
- MVP模式在安卓中的使用
- 安卓学习笔记---Android MVP 模式 简单易懂的介绍方式
- 安卓MVP
- 安卓mvp教程
- 安卓mvp学习
- 安卓MVP模式
- Android mvp的简单使用和实现
- Android中使用MVP的简单封装
- MVP+retrofit+rxjava+Knife的简单使用
- RecyclerView的MVP模式简单使用
- Android MVP框架和简单的使用
- 安卓摄像头的简单使用-黄
- MATLAB逻辑与流程控制
- hibernate核心思想-------------ORM思想
- Unity_Lua_简介
- visual studio # 从 GitHub clone 项目到本地
- Python学习(6)--字典
- 安卓MVP的简单使用
- opencv----人脸检测
- ios-静态库和动态库
- drawable自定义图形资源之shape属性
- MySQL数据库:用cmd查询所有的当前数据库连接的库,进入某个库,查询某个库中所有的表等操作
- Warning: Failed prop type: Invalid prop `enablesReturnKeyAutomatically` of type `string` supplie
- 浏览器内核
- pdo如何防止 sql注入
- Java消息中间件学习笔记八 -- ActiveMQ集群