【问题标题】:How to properly handle MaskedWallet response in nested fragments如何正确处理嵌套片段中的 MaskedWallet 响应
【发布时间】:2015-04-15 04:29:58
【问题描述】:

这是一个演示嵌套片段和钱包问题的示例应用

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

但是,当从钱包活动中选择付款方式时,结果将通过 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() 并通过事件总线或其他方式中继参数来解决我们真实代码中的问题。

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

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

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

【问题讨论】:

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


    【解决方案1】:

    我已经和谷歌讨论过这个问题。答案是没有答案。如果您在嵌套片段情况下使用SupportWalletFragment,活动结果传播将不起作用(您需要自己处理)并且您的requestCode 将不会因MaskedWalletRequest 而受到尊重(它将因@987654324 而受到尊重@)。

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

    我们需要继续使用支持库。所以在我们的例子中,我正在手动处理活动结果的传播,并且我已将我的 requestCode 设置为 500 以匹配我似乎从中获得的代码被屏蔽的钱包响应结果。我认为这是在当时的情况下可以做到的最好的。如果我更清楚,我会在这里更新。

    【讨论】:

    • 感谢您的回复 danb。我有同样的问题。我唯一担心您的解决方案是您假设生成的 requestCode 将始终为 500。我不确定我们是否可以假设,但如果它对您(和您的用户)有效,那么它可能是安全的。如果您发现其他内容,请更新此内容。
    • 支持库的最新版本(23.2)据说修复了其中一些问题,但我还没有确认。
    • 我遇到了这个问题...我正在尝试play-services-wallet:9.4.0 这个问题似乎仍然存在。有没有人也试过这个?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 2023-04-08
    • 2015-02-27
    • 2020-03-07
    相关资源
    最近更新 更多