在MVP模式中谁负责处理用户界面的点击?
例如,非MVP方法将是这样的:
counterButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
totalClicks++;
counterTextView.setText("Total clicks so far: "+totalClicks);
}
});
Run Code Online (Sandbox Code Playgroud)
使用MVP是onClick责任Presenter吗?或者View可以处理?
有人可以澄清一下吗?
sav*_*ion 31
OnClick应该调用一个Presenter方法.您应该在演示者中开展业务,如果您需要更新ui,则应在您的方法中定义一个方法View并从演示者处调用它.
你的View前任需要一个方法:
public void showCounterCount(final int totalClicks){
counterTextView.setText("Total clicks so far: "+totalClicks);
}
Run Code Online (Sandbox Code Playgroud)
你还需要一个方法和一个变量Presenter:
int totalClicks = 0;
public void onCounterButtonClicked(){
totalClicks++;
mView.showCounterCount(totalClicks);
}
Run Code Online (Sandbox Code Playgroud)
并像这样重构您的代码:
counterButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mPresenter.onCounterButtonClicked();
}
});
Run Code Online (Sandbox Code Playgroud)
对于更复杂和更干净的架构,您可以在交互器中执行用例业务.(在您的示例中,递增计数器值是您的应用程序的用例)
您可以定义一个交互器并在那里增加计数器值.
CounterInteractor:
public CounterInteractor{
public int incrementCounter(int currentCounter){
return currentCounter+1;
}
}
Run Code Online (Sandbox Code Playgroud)
并重构您的主持人,如下所示:
int totalClicks = 0;
CounterInteractor mCounterInteractor = new CounterInteractor();
public void onCounterButtonClicked(){
totalClicks = mCounterInteractor.incrementCounter(totalClicks);
mView.showCounterCount(totalClicks);
}
Run Code Online (Sandbox Code Playgroud)
使用此方法,您可以将业务逻辑与演示者完全分离,并重新使用您的用例概念,而无需在演示者中复制代码.这是更干净的方法.
你也可以检查这个git repo以获得不同的MVP方法. https://github.com/googlesamples/android-architecture/tree/todo-mvp-clean/
祝好运.
编辑:
这是我的轻量级维基百科客户端项目源:https: //github.com/savepopulation/wikilight
我正在努力实施MVP.(MVP + Dagger2 + RxJava)
| 归档时间: |
|
| 查看次数: |
7578 次 |
| 最近记录: |