如何正确处理嵌套片段中的 MaskedWallet 响应
How to properly handle MaskedWallet response in nested fragments
这是一个示例应用程序,用于演示嵌套片段和钱包的问题
https://github.com/zumper/WalletTest
这里是app的嵌套结构
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);
但是当从钱包中选择支付方式时 activity 结果通过
MainActivity.onActivityResult()
请求代码值为 66036
然后使用 500
.
的请求代码值 TopLevelFragment.onActivityResult()
就是这样。 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 都非常脆弱。
我们有一个碎片繁多的应用程序,我无法再减少现有的层次结构。
还有其他解决方法吗?
我跟google谈过这个..答案是没有答案。如果您在嵌套片段情况下使用 SupportWalletFragment
,activity 结果传播将不起作用(您需要自己处理)并且您的 requestCode
不会因 MaskedWalletRequest
(它将被授予FullWalletRequest
)。
如果您使用本机 Fragment 而不是支持库 Fragment,requestCode
将得到尊重,但您仍然需要处理自己的传播。
我们需要继续使用支持库。所以在我们的例子中,我手动处理 activity 结果的传播,并且我已将我的 requestCode
设置为 500
以匹配我似乎从蒙面钱包响应结果中获得的代码。我认为这是在这种情况下可以做的最好的事情。如果我更清楚的话,我会在这里更新。
这是一个示例应用程序,用于演示嵌套片段和钱包的问题
https://github.com/zumper/WalletTest
这里是app的嵌套结构
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);
但是当从钱包中选择支付方式时 activity 结果通过
MainActivity.onActivityResult()
请求代码值为 66036
然后使用 500
.
TopLevelFragment.onActivityResult()
就是这样。 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 都非常脆弱。
我们有一个碎片繁多的应用程序,我无法再减少现有的层次结构。
还有其他解决方法吗?
我跟google谈过这个..答案是没有答案。如果您在嵌套片段情况下使用 SupportWalletFragment
,activity 结果传播将不起作用(您需要自己处理)并且您的 requestCode
不会因 MaskedWalletRequest
(它将被授予FullWalletRequest
)。
如果您使用本机 Fragment 而不是支持库 Fragment,requestCode
将得到尊重,但您仍然需要处理自己的传播。
我们需要继续使用支持库。所以在我们的例子中,我手动处理 activity 结果的传播,并且我已将我的 requestCode
设置为 500
以匹配我似乎从蒙面钱包响应结果中获得的代码。我认为这是在这种情况下可以做的最好的事情。如果我更清楚的话,我会在这里更新。