MVP模式实例:登录界面
来源:互联网 发布:欧洲鞋子品牌 知乎 编辑:程序博客网 时间:2024/06/06 07:35
MVP的核心目标是将无关ui操作的逻辑代码从活动中抽离出来,通过一个presenter控制view和数据层的通讯。
以登录页面为例,页面需要得到用户输入的账号和密码,还要处理登录成功和失败时候的ui变化。但是登陆操作,以及判断返回的数据是成功还是失败,这一部分逻辑不需要活动考虑。
为了抽象出视图层的方法并在presenter中进行调用,定义一个接口,将登录成功失败等view的操作作为抽象函数。然后定义presenter类,在构造器参数中传入接口,这样就可以在类中调用view的方法。最后在活动中实现接口,并实例化presenter进行使用即可。
1.接口:
package com.example.one.junguiapplication.view;/** * Created by lenovo on 2016/11/26. */public interface LoginView { void onUserNameError(); void onPasswordError(); void onStartLogin(); void onLoginSuccess(); void onLoginFailed();}2.presenter:
package com.example.one.junguiapplication.presenter;import com.example.one.junguiapplication.adapter.EMCallBackAdapter;import com.example.one.junguiapplication.view.LoginView;import com.hyphenate.chat.EMClient;/** * Created by lenovo on 2016/11/26. */public class LoginPresenter { private LoginView view; public LoginPresenter(LoginView view){ this.view=view; } public void onLogin(String name,String pwd){//还不能做到正确检查 if(name.length()>20||name.length()<3||pwd.length()<3||pwd.length()>20){ view.onUserNameError(); } else { EMClient.getInstance().login(name,pwd,mEMCallBack); } } private EMCallBackAdapter mEMCallBack = new EMCallBackAdapter() { @Override public void onSuccess() { view.onLoginSuccess(); } @Override public void onError(int i, String s) { view.onLoginFailed(); } };}3.活动:
package com.example.one.junguiapplication.ui.activity;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import com.example.one.junguiapplication.R;import com.example.one.junguiapplication.presenter.LoginPresenter;import com.example.one.junguiapplication.view.LoginView;import butterknife.BindView;import butterknife.BindViews;public class LoginActivity extends BaseActivity implements LoginView,View.OnClickListener{ private final String TAG="LoginAcitivity"; private LoginPresenter presenter; @BindView(R.id.etName) private EditText etName,etPassword; private Button btnLogin; private TextView tvRegister; @Override protected void init() { super.init(); presenter=new LoginPresenter(this); etName= (EditText) findViewById(R.id.etName); etPassword= (EditText) findViewById(R.id.etPassword); btnLogin= (Button) findViewById(R.id.btnLogin); btnLogin.setOnClickListener(this); tvRegister= (TextView) findViewById(R.id.tvRegister); tvRegister.setOnClickListener(this); } @Override public int getLayoutId() { return R.layout.activity_login; } @Override public void onUserNameError() { hideDialog(); post(new Runnable() { @Override public void run() { toast("请输入正确格式"); } }); } @Override public void onPasswordError() { } @Override public void onStartLogin() { //隐藏软键盘,弹出进度条,执行登录操作 hideInputKeyBoard(); showDialog("登陆中....."); presenter.onLogin(etName.getText().toString(),etPassword.getText().toString()); } @Override public void onLoginSuccess() { hideDialog(); Log.v(TAG,"**************"); post(new Runnable() { @Override public void run() { toast("登录成功啦!"); } }); startActivity(MainActivity.class,true); } @Override public void onLoginFailed() { hideDialog(); post(new Runnable() { @Override public void run() { toast("登录失败"); } }); } @Override public void onClick(View view) { switch (view.getId()){ case R.id.btnLogin: onStartLogin(); break; case R.id.tvRegister: startActivity(RegisterActivity.class,true); break; } }}
0 0
- MVP模式实例:登录界面
- MVP详解---利用MVP模式实现一个登录界面
- 登录注册mvp模式
- MVP 模式实例解析
- MVP 模式实例解析
- MVP模式实例解释
- MVP 模式实例解析
- MVP 模式-计算器实例
- MVP模式&简单实例
- MVP模式实例
- MVP模式实例讲解
- 从MVP登录Demo理解MVP模式
- MVP模式实现登录功能
- MVP模式实现登录功能
- 简单实现mvp模式登录
- 简单的用MVP实现登录界面
- [转]MVP 模式实例解析
- Android架构:MVP模式实例
- python知识点(一)
- leetcode---Range Sum Query
- java基础知识
- POJ3070-Fibonacci
- 【Hibernate】多对多关联映射
- MVP模式实例:登录界面
- 进程终止分析之二
- 浅谈JavaScript原型及原型链
- inode更新mtime和ctime
- 机房收费系统总结
- 对Android初学者学习中的几点建议
- wordpress如何压缩HTML代码
- leetcode 495. Teemo Attacking
- HashedWheelTimer 原理