我应该在哪里做 MVP 架构中的活动导航?

roo*_*dev 4 mvp android android-mvp

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

startActivity(intent) 
Run Code Online (Sandbox Code Playgroud)

视图组件内部还是在Presenter组件内部?

Nou*_* Ch 6

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

让我进一步解释一下,假设我们的活动中有一个按钮,所以我们将在presenter 中编写它的逻辑,即调用一个presenter 方法buttonClick(),如果我们想在我们的逻辑之后打开另一个活动,我们只需调用getMvp.openMainActivity(); where as openMainActivity()将是视图的一部分。

以下是基于 MVP 架构的基本登录活动的示例方法。我的登录演示者 MVP 界面有

  void onServerLoginClick(String email, String password);
Run Code Online (Sandbox Code Playgroud)

我的登录视图 MVP 界面有

void openMainActivity();
Run Code Online (Sandbox Code Playgroud)

我的登录演示者实现是

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




    }
Run Code Online (Sandbox Code Playgroud)

我的登录视图类实现是

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

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