我有一个使用意图启动的活动LauncherActivity.java
。此意图包含其他内容。 LauncherActivity.java
对此进行了分析,并启动了多个片段之一。
场景是这样的:
LauncherActicity
具有用作页面的多个片段。现在, 从这些页面之一中,我启动了一项国外活动。现在按下 理想情况下会把我带回到LauncherActicity
中的片段,但是 如果LauncherActicity
在后台被杀死, 后退按钮是不够的。为避免这种情况,请始终使用 返回LauncherActicity
的意图将确保流程是 即使LauncherActicity
在后台被杀死也不受影响。
我的要求是,我想在已启动的片段中访问此意图,以便我可以提取出该意图的附加内容中也包含的更多信息。
问题是,当我使用getActivity().getIntent()
进行此操作时,该意图没有任何额外功能,甚至动作为null。
如何保留此意图,以便任何片段都可以使用getActivity().getIntent()
访问它?
我的代码不允许我在构造函数中传递所有这些数据或将数据写入某些全局变量。
编辑
我通过以下步骤测试了上述内容:
LauncherActivity
所在的过程,然后触发了LauncherActivity
的意图。LauncherActivity
出现了预期的情况,片段也出现了。getActivity().getIntent()
从片段中访问意图时,该意图和其中的所有其他内容在该片段中都可用。 观察
似乎LauncherActivity
的应用程序已经存在于后台程序中时,此活动的意图将调用onNewIntent()
,而当应用程序在后台被终止时,该意图将调用活动的onCreate()
。
Fragment只能使用用于创建活动的getActivity().getIntent()
访问意图(即,调用onCreate()
的意图)。该片段无法访问其余的意图。
由于包含LauncherActivity
的应用程序最初是无意启动的,因此,在一个令人满意的情况下,所有外来意图都将调用onNewIntent()
,并且在该片段中将不可访问。
答案 0 :(得分:0)
这破坏了片段与活动的隔离。
如果您在收到意图时以编程方式实例化了片段,则始终可以通过其包将数据传递给片段。
否则,您可以:
答案 1 :(得分:0)
也许我一开始并没有把问题弄清楚,但是我很惊讶我没有收到这个答案:
当调用Fragment
时,驻留在Activity
中的getActivity()
将收到此Activity
的引用。这意味着调用getActivity().getIntent()
将返回用于创建此Activity
的意图。如果Activity
收到一个意图,即该意图已经在Backstack中运行,则该意图将只是另一个意图。
这两种不同的意图有不同的对待:
Activity
的意图将调用它的onCreate()
。Activity
的意图将被调用
是onNewIntent()
。 Activity
仅保留调用它的onCreate()
的意图,而调用它的onNewIntent()
的意图在该函数的作用范围用尽后被销毁。因此,要维持在onNewIntent()
中收到的意图,我们需要使用以下新意图显式覆盖调用Activity
的{{1}}的先前意图:
onCreate()
。