gpt4 book ai didi

java - 在 MVP 中,onClick 是 View 还是 Presenter 的责任?

转载 作者:IT老高 更新时间:2023-10-28 20:45:46 27 4
gpt4 key购买 nike

在 MVP 模式中,谁负责处理 UI 上的点击?
例如。非 MVP 方法类似于:

counterButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
totalClicks++;
counterTextView.setText("Total clicks so far: "+totalClicks);
}
});

使用MVP是onClickPresenter的责任吗?还是 View 可以处理?
有人可以澄清一下吗?

最佳答案

OnClick 应该调用 Presenter 方法。您应该在 Presenter 中开展业务,如果您需要更新 ui,您应该在 View 中定义一个方法并从 Presenter 中调用它。

您需要一个方法用于您的 View 例如:

public void showCounterCount(final int totalClicks){
counterTextView.setText("Total clicks so far: "+totalClicks);
}

您的 Presenter 中还需要一个方法和一个变量:

int totalClicks = 0;

public void onCounterButtonClicked(){
totalClicks++;
mView.showCounterCount(totalClicks);
}

然后像这样重构你的代码:

counterButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mPresenter.onCounterButtonClicked();
}
});

对于更复杂和更简洁的架构,您可以在交互器中开展您的用例业务。 (在您的示例中,递增计数器值是您的应用程序的一个用例)

您可以定义一个交互器并在那里增加您的计数器值。

CounterInteractor:

public CounterInteractor{
public int incrementCounter(int currentCounter){
return currentCounter+1;
}
}

然后重构您的演示者,如下所示:

int totalClicks = 0;
CounterInteractor mCounterInteractor = new CounterInteractor();

public void onCounterButtonClicked(){
totalClicks = mCounterInteractor.incrementCounter(totalClicks);
mView.showCounterCount(totalClicks);
}

通过这种方法,您可以将业务逻辑与演示者完全分开,并重新使用您的用例概念,而无需在演示者中复制代码。这是更干净的方法。

您还可以查看此 git 存储库以了解不同的 MVP 方法。 https://github.com/googlesamples/android-architecture/tree/todo-mvp-clean/

祝你好运。

编辑:

这是我的轻量级维基百科客户端项目源: https://github.com/savepopulation/wikilight

我正在尝试实现 MVP。 (MVP + Dagger2 + RxJava)

关于java - 在 MVP 中,onClick 是 View 还是 Presenter 的责任?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38360478/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com