您的位置:首页 > 其它

电商项目 简单的mvp 适合出学者 view层和presenter层的接口回调

2017-11-06 20:09 465 查看
<LinearLayout 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:orientation="vertical">

<EditText
android:id="@+id/username_et"
android:hint="请输入账号"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

<EditText
android:id="@+id/password_et"
android:hint="请输入密码"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword" />

<Button
android:id="@+id/login_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="登录"/>

</LinearLayout>

/////////////////////////这是v层  /////////////////////////////////////////////
实现接口的方法 通过方法拿到传回来的值
package com.example.jiekou01;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements Callback, View.OnClickListener {
private static final String TAG = "MainActivity";
public static final String USERNAME = "wuzhanglao";
public static final String PASSWORD = "470782682";

private EditText username_et;
private EditText password_et;
private Button login_btn;
private Titleview titleview;

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

username_et = (EditText) findViewById(R.id.username_et);
password_et = (EditText) findViewById(R.id.password_et);
login_btn = (Button) findViewById(R.id.login_btn);
login_btn.setOnClickListener(this);

titleview = new Titleview(this);  //通过this把自己的方法传过去 ,方便去拿那边的值
//实例化对象 调titleview的方法 把UI层的值拿走
 }

//雇一个叫main的管家,然后把自己登录成功和登录失败的联系方式给他
//如果登录成功,管家会拨打loginSuccess这个电话
//如果登录失败,管家会拨打logniFailed(String msg)这个电话

//现在是UI层

public void LoginSuccess() {

Toast.makeText(MainActivity.this,"管家打电话过来说:登录成功",Toast.LENGTH_SHORT).show();
}

@Override
public void LoginFailed(String msg) {
Toast.makeText(MainActivity.this,"管家打电话过来说:"+msg,Toast.LENGTH_SHORT).show();

}

//他通过我们实例化对象 来我们UI层拿数据
public void onClick(View v) {
switch (v.getId()) {
case R.id.login_btn:
String username = username_et.getText().toString();
String password = password_et.getText().toString();
// 让自己的管家去处理登录事件
titleview.login(username, password);
break;
}
}
}
 //////////////////////////////////////////////////////////////////
接口
package com.example.jiekou01;

/**
* Created by gq on 2017/11/6.
*/
public interface Callback {

//如果登录成功,管家会拨打这个电话(接口)
void LoginSuccess();
//如果登录失败,管家会拨打这个电话(接口),并告诉MainActivity大妹子为什么登录失败
void LoginFailed(String msg);

}

////////////////////////p层写逻辑代码 减少Acitivity 的臃肿///////////////////////////////////////

package com.example.jiekou01;

import android.view.View;

/**
* Created by gq on 2017/11/6.
*/
public class Titleview  {
//private static final String TAG = "Titleview";
//p层
private Callback view;

public Titleview(Callback v) {
this.view=v;
}

public void login(String username, String password) {
if (username.isEmpty() || password.isEmpty()) {

view.LoginFailed("账号或密码不能为空");
} else if (username.length() < 8 || password.length() < 9) {
view.LoginFailed("账号至少8位,密码至少9位");
} else if (username.equals(MainActivity.USERNAME)) {
if (password.endsWith(MainActivity.PASSWORD)) {
// 登录成功,main拨打loginSuccess()电话通知主人登录成功了
view.LoginSuccess();
} else {
// 登录失败,main拨打loginFailed()电话通知主人登录失败了,并告知失败原因
view.LoginFailed("密码错误");
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: