我已经在应用程序中实现了 Google Pay 并发出了 paymentData 请求我正在使用 AutoResolveHelper 来显示底页,然后通过 onActivityResult 获取结果。我是从 Fragment 而不是 Activity 提出这个请求的。所以我正在传递这样的父母活动。
paymentsClient?.loadPaymentData(gpayViewModel.paymentDataRequest)?.let { task ->
AutoResolveHelper.resolveTask(task, requireActivity(), LOAD_PAYMENT_DATA_REQUEST_CODE)
}
问题是这个 AutoResolveHelper 没有在 Fragment 上调用 onActivityResult,而只是在 Activity 上调用。
我读过这样的东西:
如果您从片段调用 startActivityForResult(),那么您应该调用 startActivityForResult(),而不是 getActivity().startActivityForResult(),因为它会导致片段 onActivityResult()。
所以它建议当 AutoResolveHelper 在传递的活动上调用 startActivityForResult() 时,片段的 onActivityResult 将永远不会被调用。
所以现在我唯一的选择是在 Activity 中实现 onActivityResult 并以某种方式将此 Activity 的控制权传递给我的子 Fragment 但这需要一些样板代码,并且由于我的 Fragment 是可重用的,所以这个解决方案并不完美。
同时,我发现此代码 startActivityForResult 以正确的方式调用,并且片段的 onActivityResult 被正确调用:
val intent = Intent(activity, CardIOActivity::class.java)
intent.putExtra(CardIOActivity.EXTRA_REQUIRE_EXPIRY, true)
intent.putExtra(CardIOActivity.EXTRA_REQUIRE_CVV, true)
intent.putExtra(CardIOActivity.EXTRA_REQUIRE_CARDHOLDER_NAME, true)
startActivityForResult(intent, CARD_IO_REQUEST_CODE)
那么我可以用某种方式替换这个 AutoResolveHelper.resolveTask() 以执行这个任务,这样就不需要 onActivityResult 或者我可以自己 startActivityForResult 吗?