<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("密码错误"); } } } }
电商项目 简单的mvp 适合出学者 view层和presenter层的接口回调
最新推荐文章于 2022-03-01 13:56:59 发布