【问题标题】:Calling startIntentSenderForResult from Fragment (without using existing Activity) (Android Billing v3)从 Fragment 调用 startIntentSenderForResult(不使用现有 Activity)(Android Billing v3)
【发布时间】:2014-03-17 05:09:24
【问题描述】:

根据这个问题:

Calling startIntentSenderForResult from Fragment (Android Billing v3)

调用 startIntentSenderForResult 需要你传递一个实现 onActivityResult(...) 的 Activity。 Fragment 无法实现这一点,所以如果你想从一个调用方法,你必须通过一个 Activity 来传递它,大概是创建 Fragment 的 Activity。

我的问题与现有问题不同,因为我没有可以在其上实现 onActivityResult 的易于访问的 Activity。我的片段是由另一个片段创建的,并且在该片段和启动该过程的“主”活动之间发生了很多逻辑和域对象解码等。

因此,出于实际和架构的原因,我真的不希望将回调通过管道传递到该 Activity 并返回到调用片段。

我在想这样的事情:

  • 执行调用的 Fragment 创建一个临时 Activity,其中包含对 Fragment 的引用并实现 onActivityResult,它处理回调并将路由返回到 Fragment。

我们将不胜感激。

【问题讨论】:

标签: android android-fragments android-activity android-billing


【解决方案1】:

Activity(如 FragmentActivity source for onActivityResult 中所示)的默认行为是将 onActivityResult 传递给所有附加的 Fragments 的 onActivityResult 以及 Activity 的 onActivityResult。因此,只需处理 Fragment 中的onActivityResult

注意:如果您的 Activity 确实处理了onActivityResult,请确保它调用了super.onActivityResult,否则Fragment 的onActivityResult 调用将不会发生。

【讨论】:

  • 嗯,所以我想这意味着传递对我的主要活动的引用,并通过活动链实现 onActivityResult -> 片段 -> 片段。我会看看我能不能得到这个工作。
  • 只需在您的 Fragment 中调用 getActivity() 即可。
  • 哦,关于你的第二段,我不明白……“否则会发生 Fragment 的 onActivityResult 调用”——这不是我想要实现的吗? 困惑
  • 啊,这似乎容易多了。谢谢!
  • 这个答案是错误的,根据它链接的源文件。 FragmentActivity 不会将 onActivityResult 传递给所有附加的 Fragment。它通过使用 requestCode 的高 16 位存储调用片段的索引将其传递给一个片段,但前提是您从片段而不是活动调用 startActivityForResult()。由于该问题涉及仅在Activity上可用的startIntentSenderForResult(),并且派生的Fragment无法查询自己的索引,因此无法调用Activity.startIntentSenderForResult并在Fragment.onActivityResult中接收结果
猜你喜欢
  • 2012-12-17
  • 2017-05-15
  • 1970-01-01
  • 2012-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-22
相关资源
最近更新 更多