android - 如何正确处理嵌套 fragment 中的 MaskedWallet 响应

标签 android android-fragments android-pay android-nested-fragment

这是一个示例应用程序,用于演示嵌套 fragment 和钱包的问题

https://github.com/zumper/WalletTest

这是应用程序的嵌套结构

MainActivity
    |
    +-> TopLevelFragment
                |
                +-> NestedFragment
                        |
                        +-> SupportWalletFragment

SupportWalletFragment 配置为请求代码 3333 via

  public static final int WALLET_REQUEST_CODE = 3333;

  ...

  WalletFragmentInitParams.Builder startParamsBuilder =
          WalletFragmentInitParams.newBuilder()
                  .setMaskedWalletRequest(generateMaskedWalletRequest("10.99"))
                  .setMaskedWalletRequestCode(WALLET_REQUEST_CODE);

但是,当从钱包 Activity 中选择付款方式时,结果将通过 请求代码值为 66036MainActivity.onActivityResult() 然后转到 TopLevelFragment.onActivityResult(),请求代码值为 500

就是这样。 NestedFragment.onActivityResult() 永远不会使用预期的请求代码 3333

进行调用

此问题似乎是一个已知问题:

http://blog.shamanland.com/2014/01/nested-fragments-for-result.html

https://code.google.com/p/android/issues/detail?id=40537

我可以通过拦截 onActivityResult() 并通过事件总线或其他方式中继参数来解决实际代码中的问题。

棘手的部分是我什至没有传入正确的 requestCode...这使得我的所有 hack 都非常脆弱。

我们有一个 fragment 较多的应用程序,我无法比现有的减少更多的层次结构。

还有其他选项可以解决这个问题吗?

最佳答案

我已经和谷歌讨论过这个问题..答案是没有答案。如果您在嵌套 fragment 情况下使用 SupportWalletFragment,则 Activity 结果传播将不起作用(您需要自己处理),并且您的 requestCode 将不会被遵守 MaskedWalletRequest(FullWalletRequest 将会受到尊重)。

如果您使用 native fragment 而不是支持库 fragment ,requestCode 将受到尊重,但您仍然需要处理自己的传播。

我们需要继续使用支持库。因此,在我们的例子中,我手动处理 Activity 结果的传播,并且我已将 requestCode 设置为 500 以匹配我似乎从蒙面钱包响应结果中获得的代码。我认为这是在目前情况下能做的最好的事情。如果我得到更多澄清,我会在这里更新。

关于android - 如何正确处理嵌套 fragment 中的 MaskedWallet 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29641624/

相关文章:

android - 我如何在android中的选项卡式 Activity 中管理布局文件?

java - 从 Android Activity 类调用接口(interface)方法

java - Android:用下面的内容填满整个屏幕的框

Android:购买后如何处置谷歌钱包的labHelper

java - 如何在印度测试安卓支付应用程序

java - "Cannot resolve symbol ' 椭圆2D ' "

Android gradle 单独的 res/文件夹构建

java - viewPager.setOnPageChangeListener() 中 fragment 返回 null

android - 从 PHP 服务器在 Android 设备中播放视频?

android - 一个 Google Play 开发者帐户有多个 Google Merchant 帐户?