我尝试在我的项目中使用MVP,我得到一些问题。
例如我有
MyPresenter presenter;
MyFragment view;
在视图中我button
名称为“打开条形码扫描”,这是一个开放的条形码扫描活动:
IntentIntegrator.forSupportFragment(this).initiateScan()
Hwo必须加密这段代码吗? view
或presenter
?
1查看实现:
scanButton.setOnClickListener(view -> IntentIntegrator.forSupportFragment(this).initiateScan());
2主持人实现:
scanButton.setOnClickListener(view -> presenter.openScan());
接下来的问题 - 如何处理onActivityResult
?怎么样?
例如
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(requestCode){
case
...
case
...
case
//it is logic
}
修改
1路
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(requestCode){
case
presenter.callMethod1()
case
presenter.callMethod2()
case
//it is logic
}
2路
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
presenter.onActivityResult(int requestCode, int resultCode, Intent data);
}
答案 0 :(得分:2)
Presenter
充当View
和Model
之间的桥梁或中间人,因此必须在视图上调用。
onActivityResult
将与您的fragment
相同。然后,如果您需要保存扫描结果,那么您需要拨打presenter
。
演示者通常托管与特定功能关联的业务逻辑,相应的视图处理Android UI工作。视图几乎没有逻辑;它将演示者的命令转换为UI动作,并侦听用户操作,然后将其传递给演示者。
参考:https://github.com/googlesamples/android-architecture/tree/todo-mvp/
您可能会误认为onActivityResult
是业务逻辑所在,它不是。这就是为什么当你得到结果时需要将它传递给presenter
,以便演示者处理(业务逻辑)它然后将它提供给你的存储库来保存它。