OnClick 应该调用Presenter 方法。您应该在 Presenter 中开展业务,如果您需要更新用户界面,您应该在 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)