如何在嵌套片段中正确处理MaskedWallet响应

时间:2015-04-15 04:29:59

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

这是一个演示嵌套片段和钱包

问题的示例应用

https://github.com/zumper/WalletTest

这是应用程序在嵌套方面的结构

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

SupportWalletFragment通过

配置了3333请求代码
  public static final int WALLET_REQUEST_CODE = 3333;

  ...

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

但是,当从钱包活动中选择付款方式时,结果将通过 MainActivity.onActivityResult()请求代码值为66036 然后到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()并通过事件总线或其他方式中继params来解决实际代码中的问题。

棘手的部分是我甚至没有通过正确的requestCode ......这使我的所有黑客都变得非常脆弱。

我们有一个片段繁重的应用程序,我无法比现有的更多地减少层次结构。

还有其他方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

我已经和谷歌谈过这个问题了......答案是没有答案。如果您在嵌套片段情况下使用SupportWalletFragment,则活动结果传播将无效(您需要自行处理)并且requestCode将不会被MaskedWalletRequest所尊重(它将荣幸FullWalletRequest)。

如果您使用的是本机片段而不是支持库片段,则requestCode将受到尊重,但您仍需要处理自己的传播。

我们需要继续使用支持库..所以在我们的情况下,我正在处理活动结果的传播,我已将requestCode设置为500以匹配代码I似乎从掩盖的钱包响应结果中获得。我认为这是最好的情况。如果我得到额外的清晰度,我会在这里更新。