当前位置: 首页 > 知识库问答 >
问题:

Google Pay AutoResolveHelper.ResolveTask()未调用片段中的onActivityResult

高和通
2023-03-14
 paymentsClient?.loadPaymentData(gpayViewModel.paymentDataRequest)?.let { task ->
            AutoResolveHelper.resolveTask(task, requireActivity(), LOAD_PAYMENT_DATA_REQUEST_CODE)
        }

问题是,此AutoResolveHelper不是对片段调用onActivityResult,而是只对Activity调用onActivityResult。

我读过这样的东西:

如果您从片段调用startActivityForResult(),那么您应该调用startActivityForResult(),而不是getActivity().startActivityForResult(),因为这将导致片段onActivityResult()。

同时,我发现这段代码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不再是必需的,或者我可以自己启动OnActivityForResult?

共有1个答案

符学
2023-03-14

从今天起,结果的接收与活动绑定。部分原因是库没有准确地使用StartActivityForResult来启动此过程;和fragment对相同功能的支持目前是有限的。

目前基本上有两种方法可以绕过这个问题(其他线程也共享了这两种方法)。但是,我个人认为,在片段和活动之间混合职责并不能提供更好的代码清晰度和清晰的逻辑,因此到目前为止,我只考虑一种方法,其中活动负责调用AutoResolveHelper,捕获结果并将其与片段共享。我不是从片段调用活动,而是考虑通过契约/接口来实现,以降低两者之间的耦合程度。

一个简单的例子可以是:

interface PaymentsContract {
    fun loadPaymentData(request: PaymentDataRequest, requestCode: Int)
}

一旦结果就绪,您就可以选择找到有问题的片段,并将OnActivityResult方法传播给它,或者对该片段也使用类似的基于契约的方法。

了解更多关于具体用例的信息将非常有用,以便更好地理解在片段中处理这种逻辑的原理,并最终将这些反馈反馈给团队,以便在将来的开发中考虑。

希望这是有用的。

 类似资料:
  • 问题内容: 我知道有人问过这个问题,但是我遵循了所有答案,但仍然有同样的问题。我有两个脚本,一个是片段管理器(IngredientsActivity),另一个是片段(OtherList)。代码如下 成分活动 其他清单 我发现有多个建议可以覆盖onSaveInstanceState的建议,并且我发现更多建议告诉我使用setRetainInstance。我不知道如果要保存列表的值,为什么setReta

  • 我有一个应用程序,得到了一个活动与2个碎片水平放置。 在我的活动中,我使用膨胀菜单,使用它我可以显示actionbar选项菜单。但是,当我试图从其中一个片段更新操作栏菜单项时,没有调用。因此,我无法更新操作栏选项菜单。

  • 我有一个片段,其中有recyclerview,并使用recyclerview适配器在这个recyclerview中设置数据。 现在,我在适配器的列表项中单击了一个按钮,我需要检查android中的READ\u EXTERNAL\u STORAGE权限,以查看android中的新权限模型。 我在这个适配器的片段中创建了一个新函数,用于检查是否授予了权限,如果尚未授予权限,则请求权限。 我已经通过了我

  • P.P.S@Philipp Jahoda,我实现了onCreateOptionsMenu(...)在片段的托管活动中。

  • 问题内容: 下面是我在调用的onCreateView方法 我没有在操作栏中调用日志语句或菜单。 更新 :我尝试从片段的onCreate方法调用此方法,但未显示菜单。 Menu.xml 问题答案: 您需要在Fragment的一种生命周期方法中进行调用。最好从内部。 在最简单的情况下,Fragment 的方法如下所示: 同样,在自定义菜单放大后调用,会将刚刚放大的菜单重置为空菜单。 因此,请致电: 要

  • 更新:我尝试从fragment的onCreate方法调用此命令,但是菜单没有显示出来。 menu.xml