我有一个使用MVP架构构建的Android项目。我不太确定的一件事是,当我想点击一个按钮后导航到另一个活动时,我应该放置
startActivity(intent)
在视图组件内部或演示者组件内部?
答案 0 :(得分:3)
您必须在视图组件中执行此操作必须在开放式new activity
或replacing fragment
等视图中执行所有与ui相关的活动,并要求permissions
。
让我进一步解释一下,我们在活动中只有一个按钮,因此我们将在演示者中编写其逻辑,即调用presenter方法buttonClick()
,如果我们想在逻辑之后打开另一个活动,我们只需调用{ {1}}将成为观看的一部分。
以下是基于MVP架构的基本登录活动的示例方法。 我的登录Presenter MVP界面有
getMvp.openMainActivity(); where as openMainActivity()
我的登录视图MVP界面
void onServerLoginClick(String email, String password);
我的登录Presenter实现
void openMainActivity();
我的Login View类实现是
@Override
public void onServerLoginClick(String email, String password) {
//validate email and password
if (email == null || email.isEmpty()) {
getMvpView().onError(R.string.empty_email);
return;
}
if (!CommonUtils.isEmailValid(email)) {
getMvpView().onError(R.string.invalid_email);
return;
}
if (password == null || password.isEmpty()) {
getMvpView().onError(R.string.empty_password);
return;
}
getMvpView().showLoading();
User u = getDataManager().matchUser(new User(2l,"",email,password,"",""));
if (u==null){
getMvpView().onError("No user found");
getMvpView().hideLoading();
}else {
getDataManager().updateUserInfo(
"",
u.getId(),
DataManager.LoggedInMode.LOGGED_IN_MODE_SERVER,
u.getName(),
u.getEmail(),
"",
password);
getMvpView().hideLoading();
getMvpView().openMainActivity();
}
}
希望这有助于您理解这个概念。