【发布时间】: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