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
......这使我的所有黑客都变得非常脆弱。
我们有一个片段繁重的应用程序,我无法比现有的更多地减少层次结构。
还有其他方法可以解决这个问题吗?
答案 0 :(得分:2)
我已经和谷歌谈过这个问题了......答案是没有答案。如果您在嵌套片段情况下使用SupportWalletFragment
,则活动结果传播将无效(您需要自行处理)并且requestCode
将不会被MaskedWalletRequest
所尊重(它将荣幸FullWalletRequest
)。
如果您使用的是本机片段而不是支持库片段,则requestCode
将受到尊重,但您仍需要处理自己的传播。
我们需要继续使用支持库..所以在我们的情况下,我正在处理活动结果的传播,我已将requestCode
设置为500
以匹配代码I似乎从掩盖的钱包响应结果中获得。我认为这是最好的情况。如果我得到额外的清晰度,我会在这里更新。