【问题标题】:Access intent used to launch activity in a fragment用于在片段中启动活动的访问意图
【发布时间】:2019-03-20 15:39:23
【问题描述】:

我有一个使用意图启动的活动LauncherActivity.java。此意图包含额外内容。 LauncherActivity.java 对此进行额外分析并启动多个片段之一。
场景是这样的:

LauncherActicity 有多个片段作为页面。现在, 从其中一个页面中,我发起了一项外国活动。现在压回去 理想情况下会带我回到LauncherActicity 中的片段,但是 在LauncherActicity 在后台被杀死的事件中, 后退按钮是不够的。为防止这种情况,请始终使用 打算回到LauncherActicity 将确保流程是 即使LauncherActicity 在后台被杀也不受影响。

我的要求是,我想在启动的片段中访问此意图,以便我可以提取更多信息,这些信息也存在于意图的附加内容中。

问题是当我使用getActivity().getIntent() 执行此操作时,意图没有任何额外内容,甚至操作为空。 如何保留此意图,以便任何片段都可以使用getActivity().getIntent() 访问它?
我的代码不允许我在构造函数中传递所有这些数据或将数据写入某些全局变量。

编辑
我通过以下步骤测试了上述内容:

  1. 在国外活动时,我强制停止LauncherActivity 所在的进程,然后触发LauncherActivity 的意图。
  2. LauncherActivity 按预期出现,片段也出现了。
  3. 这一次,当我使用getActivity().getIntent() 从片段中访问意图时,片段中的意图和其中的所有额外内容都可用。

观察
似乎当LauncherActivity的应用程序已经存在于后台堆栈中时,此活动的意图调用onNewIntent(),而当应用程序在后台被杀死时,意图调用活动的onCreate()
Fragment 只能使用用于创建活动的getActivity().getIntent() 访问意图(即调用onCreate() 的意图)。该片段无法访问其余的意图。
由于包含LauncherActivity 的应用程序最初是在没有意图的情况下启动的,因此在幸运的情况下,所有外部意图都将调用onNewIntent(),并且无法在片段中访问。

【问题讨论】:

  • 如果您当前的流程是IntentX -> LauncherActivity -> Fragment,为什么不让它显示在包含IntentX 的Activity 中?它应该是这样的:ActivityX -> Fragment.
  • 意图由外部活动触发并在LauncherActivity 中接收。这个LauncherActivity 持有片段。我通过使用getActivity().getClass().getName() 打印父活动来验证这一点。

标签: java android android-fragments android-intent


【解决方案1】:

这打破了片段与活动的隔离。

如果您在接收到意图时以编程方式实例化片段,则始终可以通过其捆绑包将数据传递给片段。

否则,您可以:

【讨论】:

  • 我已按问题更新以表明全貌。 Intent 的目的是在 LauncherActicity 被杀死的情况下恢复片段。
【解决方案2】:

也许我最初的问题没有足够清楚,但我很惊讶我没有收到这个答案:

当调用getActivity() 时,位于Activity 中的Fragment 将收到对此Activity 的引用。这意味着调用getActivity().getIntent() 将返回用于创建Activity 的意图。如果Activity 收到一个意图,当它已经在后台堆栈中运行时,该意图将只是另一个意图。
这两种不同的意图被区别对待:

  1. 用于创建 Activity 的 Intent 将调用它的 onCreate()
  2. Intent 用于调用已在运行的Activity,将调用 我是onNewIntent()

Activity 将只维护调用它的意图 onCreate() 并且调用它的意图 onNewIntent() 在此函数的范围用完后被销毁。因此,为了维护在onNewIntent() 中接收到的意图,我们需要使用以下新意图显式覆盖调用ActivityonCreate() 的先前意图:

setIntent(intent).

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-13
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多