我应该在 MVP 架构中的什么地方进行 activity 导航?

Where should I do activity navigation in MVP architecture?

我有一个 Android 项目是使用 MVP 架构构建的。我不太确定的一件事是,例如,当我想在单击按钮后导航到另一个 activity 时,我是否应该放置

startActivity(intent) 

view 组件内还是在 presenter 组件内?

您必须在视图组件中执行此操作,所有 ui 相关活动都必须在打开 new activityreplacing fragment 并请求 permissions 等视图中执行。

让我进一步解释一下,假设我们 activity 中有一个按钮,所以我们将在演示器中编写其逻辑,即调用演示器方法 buttonClick() 如果我们想打开另一个 activity 根据我们的逻辑,我们简单地调用 getMvp.openMainActivity(); where as openMainActivity() 将成为视图的一部分。

这是一个基于 MVP 架构的基本登录方法示例 activity。 我的 Login Presenter MVP 界面有

  void onServerLoginClick(String email, String password);

我的登录视图MVP界面有

void openMainActivity();

我的 Login Presenter 实现是

@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();
        }




    }

我的登录视图 class 实现是

@Override
    public void openMainActivity() {
        Intent intent = MainActivity.getStartIntent(LoginActivity.this);
        startActivity(intent);
        finish();
    }

希望这能帮助您理解这个概念。