首先新建base包,再创建一个接口 —— IView:
package com.example.mvp_demo3.base;
import android.content.Context;
/**
* Created by DELL on 2018/6/13.
*/
public interface IView {
Context context();
}
LoginViewInterface继承IView:
package com.example.mvp_demo3.view.iview;
import com.example.mvp_demo3.base.IView;
import com.example.mvp_demo3.model.bean.UserLogin;
/**
* Created by DELL on 2018/6/13.
*/
public interface LoginViewInterface extends IView{
void success(UserLogin userLogin);
void failed(String error);
}
在base包下创建BasePresenter类(泛型是IView接口):
package com.example.mvp_demo3.base;
/**
* Created by DELL on 2018/6/13.
*/
public abstract class BasePresenter<V extends IView> {
protected V view;
public BasePresenter(V view){
this.view = view;
initModel();
}
protected abstract void initModel();
void onDestroy() {
view = null;
}
}
然后再在base包下创建BaseActivity类(泛型则是BasePresenter):
package com.example.mvp_demo3.base;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
/**
* Created by DELL on 2018/6/13.
*/
public abstract class BaseActivity<P extends BasePresenter> extends AppCompatActivity{
protected P presenter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(provideLayoutId());
initView();
initListener();
presenter = providePresenter();
initData();
}
protected abstract P providePresenter();
protected void initData(){}
protected void initListener(){}
protected void initView(){}
protected abstract int provideLayoutId();
@Override
protected void onDestroy() {
presenter.onDestroy();
super.onDestroy();
}
}
回到LoginPresenter中继承自BasePresenter(泛型是外部接口)
package com.example.mvp_demo3.presenter;
import com.example.mvp_demo3.base.BasePresenter;
import com.example.mvp_demo3.model.LoginModel;
import com.example.mvp_demo3.model.bean.UserLogin;
import com.example.mvp_demo3.view.iview.LoginViewInterface;
/**
* Created by DELL on 2018/6/13.
*/
public class LoginPresenter extends BasePresenter<LoginViewInterface>{
private LoginModel loginModel;
LoginViewInterface mLoginViewInterface;
public LoginPresenter(LoginViewInterface loginViewInterface){
super(loginViewInterface);
mLoginViewInterface = loginViewInterface;
loginModel = new LoginModel();
}
@Override
protected void initModel() {
}
public void login(String mobile, String password){
if(mobile == null){
if(mLoginViewInterface != null){
mLoginViewInterface.failed("手机号输入不能为空");
}
return;
}
loginModel.login(mobile, password, new LoginModel.LoginModelInterface() {
@Override
public void success(UserLogin userLogin) {
if(mLoginViewInterface != null){
mLoginViewInterface.success(userLogin);
}
}
@Override
public void failed(String error) {
if(mLoginViewInterface != null){
mLoginViewInterface.failed(error);
}
}
});
}
}
再回到MainActivity中继承自BaseActivity(泛型是LoginPresenter)
泛型是LoginPresenter)
package com.example.mvp_demo3.view.activity;
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.example.mvp_demo3.R;
import com.example.mvp_demo3.base.BaseActivity;
import com.example.mvp_demo3.model.bean.UserLogin;
import com.example.mvp_demo3.presenter.LoginPresenter;
import com.example.mvp_demo3.view.iview.LoginViewInterface;
public class MainActivity extends BaseActivity<LoginPresenter> implements View.OnClickListener, LoginViewInterface{
@Override
protected LoginPresenter providePresenter() {
return new LoginPresenter(this);
}
@Override
protected int provideLayoutId() {
return R.layout.activity_main;
}
@Override
protected void initListener() {
findViewById(R.id.btn_login).setOnClickListener(this);
}
@Override
public void onClick(View view) {
presenter.login("15501186523","123456");
}
@Override
public void success(final UserLogin userLogin) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, "登陆成功:"+userLogin.getData().getMobile(), Toast.LENGTH_SHORT).show();
}
});
}
@Override
public void failed(final String error) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, "登陆失败:"+error, Toast.LENGTH_SHORT).show();
}
});
}
@Override
public Context context() {
return this;
}
}
--- Finish ---