使用mvp接口回调实现最简单的登陆

LoginView


package com.example.huidiao;

/**
 * Created by 小薇 on 2018/7/11.
 */

public interface LogView {
    //progress  显示
    void showProgress();
    //progress 隐藏
    void hideProgress();
    //name 格式错误
    void setUsernameError();
    //pswd 格式错误
    void setPasswordError();
    //页面成功跳转home
    void navigateToHome();
}

LoginViewImpl

package com.example.huidiao;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.ProgressBar;

public class LogActivity extends AppCompatActivity implements LogView, View.OnClickListener {

    private ProgressBar progressBar;
    private EditText username;
    private EditText password;
    private PresenterActivity presenterActivity;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_log);
        //初始化控件
        progressBar = findViewById(R.id.progress);
        username = findViewById(R.id.username);
        password= findViewById(R.id.password);
        findViewById(R.id.button).setOnClickListener(this);
        presenterActivity = new PresenterActivity(this);
    }

    @Override
    protected void onDestroy() {
        presenterActivity.onDestroys();
        super.onDestroy();
    }

    //显示视图
    @Override
    public void showProgress() {
        progressBar.setVisibility(View.VISIBLE);
    }
    //隐藏试图
    @Override
    public void hideProgress() {
       progressBar.setVisibility(View.GONE);
    }
    //用户名错误
    @Override
    public void setUsernameError() {
         username.setError(getString(R.string.username_error));
    }

    @Override
    public void setPasswordError() {
        password.setError(getString(R.string.password_error));
    }

    @Override
    public void navigateToHome() {
        startActivity(new Intent(this,MainActivity.class));
    }

    @Override
    public void onClick(View view) {
         presenterActivity.validate(username.getText().toString(),password.getText().toString());
    }
}

LoginPresenter

package com.example.huidiao;

/**
 * Created by 小薇 on 2018/7/11.
 */

public interface LogPresenter {
    //获取view的数据
    void validate(String username,String password);
    //解绑
    void onDestroys();
}


LoginPresenterimpl

package com.example.huidiao;

/**
 * Created by 小薇 on 2018/7/11.
 */

public class PresenterActivity implements LogPresenter, LogModel.OnLoginFinishedListener {

   private   LogView logView;
   private LogModel model;

    public PresenterActivity(LogView logView) {
        this.logView= logView;
        //实例化model
        this.model= new ModelImplements();
    }

    @Override
    public void validate(String username, String password) {
          if(logView!=null){
              logView.showProgress();
          }
      model.login(username,password,this);
    }

    @Override
    public void onDestroys() {
             logView=null;
    }

    @Override
    public void onUsernameError() {
        if(logView!=null){
            logView.setUsernameError();
            logView.hideProgress();
        }
    }

    @Override
    public void onPasswordError() {
        if(logView!=null){
            logView.setPasswordError();
            logView.hideProgress();
        }
    }

    @Override
    public void onSuccess() {
         if(logView!=null){
             logView.navigateToHome();
         }
    }
}
LoginModel
package com.example.huidiao;

/**
 * Created by 小薇 on 2018/7/11.
 */

public interface LogModel {
    interface  OnLoginFinishedListener{
        //用户名错误
        void onUsernameError();
        //密码错误
        void onPasswordError();
        //成功
        void onSuccess();
    }
     void login(String username,String password,OnLoginFinishedListener onLoginFinishedListener);
}


LoginModelImpl

package com.example.huidiao;


import android.os.Handler;
import android.text.TextUtils;

/**
 * Created by 小薇 on 2018/7/11.
 */

public class ModelImplements  implements LogModel{
    @Override
    public void login(final String username, final String password, final OnLoginFinishedListener onLoginFinishedListener) {
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
            boolean error=false;
            if(TextUtils.isEmpty(username)){
                onLoginFinishedListener.onUsernameError();
                error=true;
                return;
            }
            if(TextUtils.isEmpty(password)){
                onLoginFinishedListener.onPasswordError();
                error=true;
                return;
            }
            if(!error){
                onLoginFinishedListener.onSuccess();
            }
            }
        },2000);
    }
}

xml
 
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="250dp"
    android:layout_height="wrap_content"
    android:layout_marginTop="16dp"
    android:orientation="vertical"
    android:gravity="center"
    android:layout_gravity="center_horizontal"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <EditText
        android:id="@+id/username"
        android:gravity="center_vertical"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:drawablePadding="8dp"
        android:hint="@string/user_name"/>
    <EditText
        android:id="@+id/password"
        android:gravity="center_vertical"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:drawablePadding="8dp"
        android:hint="@string/password"
        android:inputType="textPassword"/>
    <Button
        android:id="@+id/button"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:text="@string/log_in"/>
    <ProgressBar
        android:id="@+id/progress"
        android:layout_marginTop="8dp"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:visibility="gone"/>
</LinearLayout>


猜你喜欢

转载自blog.csdn.net/MessageFang/article/details/81010604