如何使用Mortar处理onActivityResult()

时间:2014-09-11 02:27:53

标签: android mortar

我希望将应用程序与Google Play服务和Mortar集成,以检索用户的当前位置。

https://developer.android.com/training/location/retrieve-current.html#CheckServices

如果Google Play服务不可用,则需要处理onActivityResult()。

我对如何执行此操作的第一直觉是让getFirstScreen()中的Main.java返回空白加载屏幕。 https://github.com/square/mortar/blob/master/mortar-sample/src/main/java/com/example/mortar/core/Main.java

注入后,在onCreate()期间执行检查以查看Google Play服务是否可用。如果是,则调用flow.goTo(<location using screen>),如果没有,则不执行任何操作并等待onActivityResult()被调用。然后,当onActivityResult()触发时,只需拨打flow.goTo(<location using screen>)

以上看起来对我来说有些苛刻。 (如果您需要澄清,请告诉我)。因此,我认为其他解决方案可能是执行与此Mortar + Flow with third party libraries hooked to activity lifecycle类似的操作,并将onActivityResult()挂钩到演示者。这样做的问题是,我无法访问演示者Activity,导致无法拨打GooglePlayServicesUtil.getErrorDialog(...),因为它需要Activity

我认为onActivityResult()非常重要。也许它应该是Mortar库的一部分?

1 个答案:

答案 0 :(得分:9)

以下是我们如何处理Square Register中的startActivityForResult。

public SomePresenter extends Presenter<SomePresenter.Activity> {
  public interface Activity {
    void startActivityForResult(android.content.Intent intent, int requestCode);
  }

  public final void onActivityResult(int requestCode, int resultCode, Intent data) {
    // Make sure it's the expected requestCode and resultCode and do your thing.
    // If it isn't, no-op, someone else will handle it.
  }
}

活动看起来像:

public MyActivity extends Activity implements SomePresenter.Activity {


  @Override protected void onCreate(Bundle bundle) {
    // Do the usual mortar init stuff

    somePresenter.takeView(this);
  }

  @Override protected void onActivityResult(int requestCode, int   resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    somePresenter.onActivityResult(requestCode, resultCode, data);
  }

  @Override protected void onDestroy() {
    somePresenter.dropView(this);
    super.onDestroy();
  }
}

这对错误对话框没有帮助,但无论如何这听起来像是一个单独的问题。好像你可以在那里使用Popup / PopupPresenter对。 (我对Popup并不感到兴奋,但是在我们有了更好的想法之前它就完成了工作。)或者也许活动应该继续并自己处理它?我对Play服务并不是很熟悉,还没有处理它们。