用于启动片段中的活动的访问意图

时间:2019-03-20 15:39:24

标签: java android android-fragments android-intent

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

  

LauncherActicity具有用作页面的多个片段。现在,   从这些页面之一中,我启动了一项国外活动。现在按下   理想情况下会把我带回到LauncherActicity中的片段,但是   如果LauncherActicity在后​​台被杀死,   后退按钮是不够的。为避免这种情况,请始终使用   返回LauncherActicity的意图将确保流程是   即使LauncherActicity在后​​台被杀死也不受影响。

我的要求是,我想在已启动的片段中访问此意图,以便我可以提取出该意图的附加内容中也包含的更多信息。

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

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

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

观察
似乎LauncherActivity的应用程序已经存在于后台程序中时,此活动的意图将调用onNewIntent(),而当应用程序在后台被终止时,该意图将调用活动的onCreate()
Fragment只能使用用于创建活动的getActivity().getIntent()访问意图(即,调用onCreate()的意图)。该片段无法访问其余的意图。
由于包含LauncherActivity的应用程序最初是无意启动的,因此,在一个令人满意的情况下,所有外来意图都将调用onNewIntent(),并且在该片段中将不可访问。

2 个答案:

答案 0 :(得分:0)

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

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

否则,您可以:

答案 1 :(得分:0)

也许我一开始并没有把问题弄清楚,但是我很惊讶我没有收到这个答案:

当调用Fragment时,驻留在Activity中的getActivity()将收到此Activity的引用。这意味着调用getActivity().getIntent()将返回用于创建Activity的意图。如果Activity收到一个意图,即该意图已经在Backstack中运行,则该意图将只是另一个意图。
这两种不同的意图有不同的对待:

  1. 用于创建Activity的意图将调用它的onCreate()
  2. 用于调用已经运行的Activity的意图将被调用 是onNewIntent()

Activity仅保留调用它的onCreate()的意图,而调用它的onNewIntent()的意图在该函数的作用范围用尽后被销毁。因此,要维持在onNewIntent()中收到的意图,我们需要使用以下新意图显式覆盖调用Activity的{​​{1}}的先前意图:

  

onCreate()