您的位置:首页 > 移动开发 > Android开发

浅谈 android mvp 模式的使用

2016-07-29 15:45 405 查看
所谓的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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: