Я реализовал Google Pay в приложении и отправляю запрос paymentData. Я использую AutoResolveHelper для отображения нижнего листа, а затем получаю результаты с помощью onActivityResult.Я делаю этот запрос от фрагмента, а не от деятельности.Так что я передаю родительскую активность вот так.
paymentsClient?.loadPaymentData(gpayViewModel.paymentDataRequest)?.let { task ->
AutoResolveHelper.resolveTask(task, requireActivity(), LOAD_PAYMENT_DATA_REQUEST_CODE)
}
проблема в том, что этот AutoResolveHelper не вызывает onActivityResult для Fragment, а только для Activity.
Я прочитал что-то вроде этого:
Если вы вызываете startActivityForResult () из фрагмента, вам следует вызывать startActivityForResult (), а не getActivity (). StartActivityForResult (),так как это приведет к фрагменту onActivityResult ().
Таким образом, предполагается, что когда AutoResolveHelper вызывает startActivityForResult () для переданной активности, тогда onActivityResult фрагмента никогда не будет вызываться.
Так что теперь мой единственный вариант - реализовать onActivityResult в Activity и каким-то образом передать управление из этого Activity моему дочернему фрагменту, но для этого нужен некоторый шаблонный код, и поскольку мой фрагмент можно использовать повторно, это решение не является идеальным.
Тем временем я заметил, что этот код правильно запускает 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 не понадобится или я мог бы запустить ActivityForResult сам?