浅谈 android mvp 模式的使用

来源:互联网 发布:js ios 时间戳格式化 编辑:程序博客网 时间:2024/04/30 02:01

所谓的mvp,即是(model-处理业务逻辑(主要是数据读写,或者与后台通信(其实也是读写数据)),view-处理ui控件,presenter-主导器,操作model和view)

那么现在直接来看下小demo

首先

Bean

package com.czh.mvptraining.bean;/** * Created by Administrator on 2016/7/27. */public class User {    private String username;    private String password;    public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }}
ILoginListener

package com.czh.mvptraining.Util;import com.czh.mvptraining.bean.User;/** * Created by Administrator on 2016/7/27. */public interface ILoginListener {    void loginSuccess(User user);    void loginFailed();}
IUserBiz

package com.czh.mvptraining.Util;/** * Created by Administrator on 2016/7/27. */public interface IUserBiz {    void login(String username, String password, ILoginListener iLoginListener);}
IUserLoginView

package com.czh.mvptraining.Util;import com.czh.mvptraining.bean.User;/** * Created by Administrator on 2016/7/27. */public interface IUserLoginView {    String getUsername();    String getPassword();    void showLoading();    void hideLoading();    void clearUsername();    void clearPassword();    void toMainActivity(User user);    void showFailedError();}
UserBiz

package com.czh.mvptraining.Util;import com.czh.mvptraining.bean.User;/** * Created by Administrator on 2016/7/27. */public class UserBiz implements IUserBiz {    @Override    public void login(final String username, final String password, final ILoginListener iLoginListener) {        new Thread() {            @Override            public void run() {                try {                    Thread.sleep(2000);                } catch (InterruptedException e) {                    e.printStackTrace();                }                //模拟登陆成功                if("czh".equals(username)&&"123".equals(password)){                    User user = new User();                    user.setUsername(username);                    user.setPassword(password);                    iLoginListener.loginSuccess(user);                }else{                    iLoginListener.loginFailed();                }            }        }.start();    }}
UserLoginPresenter

package com.czh.mvptraining.Util;import android.os.Handler;import com.czh.mvptraining.bean.User;/** * Created by Administrator on 2016/7/27. */public class UserLoginPresenter {    private IUserBiz iUserBiz;    private IUserLoginView iUserLoginView;    private Handler mHandler = new Handler();    public UserLoginPresenter(IUserLoginView iUserLoginView) {        this.iUserLoginView = iUserLoginView;        this.iUserBiz = new UserBiz();    }    public void login(){        iUserLoginView.showLoading();        iUserBiz.login(iUserLoginView.getUsername(), iUserLoginView.getPassword(), new ILoginListener() {            @Override            public void loginSuccess(final User user) {                mHandler.post(new Runnable() {                    @Override                    public void run() {                        iUserLoginView.hideLoading();                        iUserLoginView.toMainActivity(user);                    }                });            }            @Override            public void loginFailed() {                mHandler.post(new Runnable() {                    @Override                    public void run() {                        iUserLoginView.showFailedError();                        iUserLoginView.hideLoading();                    }                });            }        });    }    public void clear(){        iUserLoginView.clearUsername();        iUserLoginView.clearPassword();    }}
xml文件

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:gravity="center"    tools:context=".main.MainActivity">    <LinearLayout        android:layout_width="match_parent"        android:layout_height="match_parent"        android:orientation="vertical">        <LinearLayout            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:orientation="horizontal"            android:padding="20dp">            <TextView                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:text="username:" />            <EditText                android:id="@+id/act_main_username"                android:layout_width="match_parent"                android:layout_height="wrap_content" />        </LinearLayout>        <LinearLayout            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:orientation="horizontal"            android:padding="20dp">            <TextView                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:text="password:" />            <EditText                android:id="@+id/act_main_password"                android:layout_width="match_parent"                android:layout_height="wrap_content"                android:inputType="numberPassword" />        </LinearLayout>        <LinearLayout            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:orientation="horizontal"            android:padding="20dp">            <Button                android:id="@+id/act_main_login"                android:layout_width="0dp"                android:layout_height="wrap_content"                android:layout_weight="1"                android:text="login" />            <Button                android:id="@+id/act_main_clear"                android:layout_width="0dp"                android:layout_height="wrap_content"                android:layout_weight="1"                android:text="clear" />        </LinearLayout>    </LinearLayout>    <LinearLayout        android:layout_width="match_parent"        android:layout_height="match_parent"        android:gravity="center">        <ProgressBar            android:id="@+id/act_main_progress"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:padding="20dp"            android:visibility="gone" />    </LinearLayout></RelativeLayout>
MainActivity

package com.czh.mvptraining.main;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.ProgressBar;import android.widget.Toast;import com.czh.mvptraining.R;import com.czh.mvptraining.Util.IUserLoginView;import com.czh.mvptraining.Util.UserLoginPresenter;import com.czh.mvptraining.bean.User;public class MainActivity extends AppCompatActivity implements IUserLoginView {    private EditText act_main_username;    private EditText act_main_password;    private ProgressBar act_main_progress;    private Button act_main_login;    private Button act_main_clear;    private UserLoginPresenter userLoginPresenter = new UserLoginPresenter(this);    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();    }    private void initView() {        act_main_username = (EditText) findViewById(R.id.act_main_username);        act_main_password = (EditText) findViewById(R.id.act_main_password);        act_main_progress = (ProgressBar) findViewById(R.id.act_main_progress);        act_main_login = (Button) findViewById(R.id.act_main_login);        act_main_clear = (Button) findViewById(R.id.act_main_clear);        act_main_login.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                userLoginPresenter.login();            }        });        act_main_clear.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                userLoginPresenter.clear();            }        });    }    @Override    public String getUsername() {        return act_main_username.getText().toString().trim();    }    @Override    public String getPassword() {        return act_main_password.getText().toString().trim();    }    @Override    public void showLoading() {        act_main_progress.setVisibility(View.VISIBLE);    }    @Override    public void hideLoading() {        act_main_progress.setVisibility(View.GONE);    }    @Override    public void clearUsername() {        act_main_username.setText("");    }    @Override    public void clearPassword() {        act_main_password.setText("");    }    @Override    public void toMainActivity(User user) {        Toast.makeText(this, user.getUsername() + " loginSuccess to MainActivity", Toast.LENGTH_SHORT).show();    }    @Override    public void showFailedError() {        Toast.makeText(this, "loginFailed", Toast.LENGTH_SHORT).show();    }}





0 0