1、MVP模型简介
MVP即Model-View-Presenter模型
说明:1)MVPActivity需要实现IMVPView接口,含有MVPPresenter的引用
2)MVPModel是数据的处理
3)MVPPresenter是连接View和Model的,含有View和Modle的引用
示例:
1、接口 IMVPView.java
package com.example.moduledemo.mvp;
import com.example.moduledemo.bean.Account;
/**
* author : huangyi
* date : 2020/2/17
* desc :
*/
public interface IMVPView {
//获取用户输入信息
String getUserInput();
//展示获取数据成功的界面
void showSuccessPage(Account account);
//展示获取数据失败的界面
void showFailedPage();
}
2、Account.java
package com.example.moduledemo.bean;
/**
* author : huangyi
* date : 2020/2/17
* desc :
*/
public class Account {
private String name;//账号名称
private int level;//账号等级
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
}
3、MCallback.java
package com.example.moduledemo.callback;
import com.example.moduledemo.bean.Account;
/**
* author : huangyi
* date : 2020/2/17
* desc :
*/
public interface MCallback {
void onSuccess(Account account);
void onFailed();
}
4、MVPModel.java
package com.example.moduledemo.mvp;
import com.example.moduledemo.bean.Account;
import com.example.moduledemo.callback.MCallback;
import java.util.Random;
/**
* author : huangyi
* date : 2020/2/17
* desc :
*/
public class MVPModel {
//获取账号数据
public void getAccountData(String accountName, MCallback callback) {
Random random = new Random();
boolean isSuccess = random.nextBoolean();
if (isSuccess) {
Account account = new Account();
account.setName(accountName);
account.setLevel(100);
callback.onSuccess(account);
} else {
callback.onFailed();
}
}
}
4、MVPPresenter.java
package com.example.moduledemo.mvp;
import com.example.moduledemo.bean.Account;
import com.example.moduledemo.callback.MCallback;
/**
* author : huangyi
* date : 2020/2/17
* desc :
*/
public class MVPPresenter {
private IMVPView mView;
private MVPModel mModel;
public MVPPresenter(IMVPView mView) {
this.mView = mView;
mModel = new MVPModel();
}
public void getData(String accountName) {
mModel.getAccountData(accountName, new MCallback() {
@Override
public void onSuccess(Account account) {
mView.showSuccessPage(account);
}
@Override
public void onFailed() {
mView.showFailedPage();
}
});
}
}
5、MVPActivity.java
package com.example.moduledemo.mvp;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import com.example.moduledemo.R;
import com.example.moduledemo.bean.Account;
/**
* author : huangyi
* date : 2020/2/17
* desc :
*/
public class MVPActivity extends AppCompatActivity implements IMVPView {
private TextView mTvResult;
private EditText mEtAccount;
private Button mBtnGetAccount;
private MVPPresenter mMVPPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_normal);
initView();
mMVPPresenter = new MVPPresenter(this);
setListener();
}
private void initView() {
mTvResult = findViewById(R.id.tv_result);
mEtAccount = findViewById(R.id.et_account);
mBtnGetAccount = findViewById(R.id.btn_getAccount);
}
private void setListener() {
mBtnGetAccount.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mMVPPresenter.getData(getUserInput());
}
});
}
@Override
public String getUserInput() {
return mEtAccount.getText().toString();
}
@Override
public void showSuccessPage(Account account) {
mTvResult.setText("用户账号:" + account.getName() + " | " + " 用户等级:" + account.getLevel());
}
@Override
public void showFailedPage() {
mTvResult.setText("获取数据失败");
}
}