Android之 学习MVP最最简单的构建
MVP是从MVC里演变来的,比MVC有更好的耦合性,相通的地方:
Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。
不同的地方:
1.MVC中的V可以直接访问M。MVP中的V不可以直接访问M,需要通过P。
···
不赘述了。
打开你的AS,一起从头开始搭建一个MVP Demo吧(以登录为例)
1.定义View层接口
public interface LoginView {
void loginSuccess();//登录成功
void loginFail();//登录失败
}
2.MainActivity实现View接口
public class MainActivity extends AppCompatActivity implements LoginView {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public void loginSuccess() {
//登录成功的操作
}
@Override
public void loginFail() {
//登录失败的操作
}
}
3.定义Model接口
public interface LoginModel {
interface OnLoginListener {
void onLoginSuccess();
void onLoginFail();
}
void login(String username, String password, OnLoginListener listener);
}
4.Model接口的实现类
public class LoginModelImpl implements LoginModel {
@Override
public void login(final String username, final String password, final OnLoginListener listener) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (username.equals("admin") && password.equals("admin")){
listener.onLoginSuccess();
} else {
listener.onLoginFail();
}
}
}, 2000);
}
}
5.定义Present接口(控制Model来执行具体登录操作)
public interface LoginPresent {
void doLogin(String username, String password);
}
6.Present接口的实现类
public class LoginPresentImpl implements LoginPresent, LoginModel.OnLoginListener {
private LoginView mView;
private LoginModel mModel;
public LoginPresentImpl(LoginView mView, LoginModel mModel) {
this.mView = mView;
this.mModel = mModel;
}
@Override
public void doLogin(String username, String password) {
mModel.login(username, password, this);
}
@Override
public void onLoginSuccess() {
mView.loginSuccess();
}
@Override
public void onLoginFail() {
mView.loginFail();
}
}
7.在MainActivity中控制Present去执行登录
public class MainActivity extends AppCompatActivity implements LoginView {
private LoginPresentImpl mPresent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mPresent = new LoginPresentImpl(this, new LoginModelImpl());
findViewById(R.id.login).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String username = ((EditText) findViewById(R.id.username)).getText().toString().trim();
String password = ((EditText) findViewById(R.id.password)).getText().toString().trim();
if (!username.equals("") && !password.equals("")) {
//执行登录操作需要通过Present控制Model请求
mPresent.doLogin(username, password);
} else {
//用户名或者密码为空
//当然,可以根据业务需求,更改判断。这里随便写的
}
}
});
}
@Override
public void loginSuccess() {
//登录成功的操作
}
@Override
public void loginFail() {
//登录失败的操作
}
}
最最简单的MVP Demo 就构建完了。
哦对了...
8.activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.user.mvplogindemo.MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<EditText
android:id="@+id/username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<EditText
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="登录"
/>
</LinearLayout>
</RelativeLayout>
OK,完成了。
这篇博客应该算比较简单的了。照着做就行
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术