OnClick 应该调用一个方法。您应该在演示器中开展业务,如果您需要更新UI,则应在中定义一个方法并从演示器调用它。Presenter
View
你需要一个方法给你的前任: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();
}
});
对于更复杂和干净的架构,您可以在交互器中执行用例业务。(在您的示例中,递增计数器值是应用程序的用例)
您可以定义一个交互器,并在其中递增计数器值。
计数器交互器:
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 + Dagger2 + RxJava)MVP