正确使用MVP项目中的onActivityResult

时间:2018-01-25 08:41:08

标签: android onactivityresult android-mvp

我尝试在我的项目中使用MVP,我得到一些问题。

例如我有

MyPresenter presenter;
MyFragment view;

在视图中我button名称为“打开条形码扫描”,这是一个开放的条形码扫描活动:

IntentIntegrator.forSupportFragment(this).initiateScan()

Hwo必须加密这段代码吗? viewpresenter

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);
        }

1 个答案:

答案 0 :(得分:2)

Presenter充当ViewModel之间的桥梁或中间人,因此必须在视图上调用。

onActivityResult将与您的fragment相同。然后,如果您需要保存扫描结果,那么您需要拨打presenter

  

演示者通常托管与特定功能关联的业务逻辑,相应的视图处理Android UI工作。视图几乎没有逻辑;它将演示者的命令转换为UI动作,并侦听用户操作,然后将其传递给演示者。

参考:https://github.com/googlesamples/android-architecture/tree/todo-mvp/

您可能会误认为onActivityResult是业务逻辑所在,它不是。这就是为什么当你得到结果时需要将它传递给presenter,以便演示者处理(业务逻辑)它然后将它提供给你的存储库来保存它。