繁体   English   中英

如何使用Mortar处理onActivityResult()

[英]How to handle onActivityResult() with Mortar

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

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

这需要在Google Play服务不可用的情况下处理onActivityResult()。

我对如何做到这一点的第一直觉是让Main.java getFirstScreen()返回一个空白加载屏幕。 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的东西,第三方库挂钩到活动生命周期,并将onActivityResult()连接到演示者。 这样做的问题是我无法从演示者访问Activity ,这使得无法调用GooglePlayServicesUtil.getErrorDialog(...)因为它需要Activity

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

以下是我们如何处理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服务并不是很熟悉,还没有处理过它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM