我目前有以下逻辑在Activities之间传递数据。
Intent resumeMainActivity = new Intent (this, typeof(RecordNowController));
resumeMainActivity.PutExtra ("EditedData", editContent);
StartActivity(resumeMainActivity);
数据传递正常,但它会重新创建活动。
Intent resumeMainActivity = new Intent (this, typeof(RecordNowController));
resumeMainActivity.PutExtra ("EditedData", editContent);
-->resumeMainActivity.AddFlags(ActivityFlags.ReorderToFront);
resumeMainActivity.PutExtra ("EditedData", editContent);
StartActivity(resumeMainActivity);
添加该行可恢复当前活动,而不是创建新活动。但由于某些原因,数据不会通过。
有人知道这是为什么吗?
谢谢。
答案 0 :(得分:0)
这是默认行为,如果您不想创建新的行为,请使用
resumeMainActivity.AddFlags(ActivityFlags.SingleTop);
来自文档:
活动是否可以从启动它的任务转移到任务,它与下一个任务接下来时具有亲和力 - 如果它可以移动则为“true”,如果必须保留则为“false”开始的任务。
如果未设置此属性,则<application>
元素的相应allowTaskReparenting属性设置的值将应用于活动。默认值为“false”。
通常,当一个活动开始时,它与启动它的活动的任务相关联,并且它在整个生命周期中都会保持活动状态。您可以使用此属性强制将其重新设置为与其当前任务不再显示时具有亲缘关系的任务。通常,它用于使应用程序的活动移动到与该应用程序关联的主任务。
例如,如果电子邮件包含指向网页的链接,则单击该链接会显示可显示该页面的活动。该活动由浏览器应用程序定义,但作为电子邮件任务的一部分启动。如果它被重新设置为浏览器任务,它将在浏览器下一个到达前面时显示,并且在电子邮件任务再次出现时将不再显示。
活动的亲和力由taskAffinity属性定义。通过读取其根活动的亲和力来确定任务的亲和力。因此,根据定义,根活动始终处于具有相同亲缘关系的任务中。由于具有“singleTask”或“singleInstance”启动模式的活动只能位于任务的根目录,因此重新生成父项仅限于“标准”和“单一顶部”模式。 (另请参阅launchMode属性。)
SingleTop会很好地传递数据。
答案 1 :(得分:0)
我刚刚看到你的回复,但谢谢你。
我最终使用StartActivityForResult()来启动活动,它运行正常。
参考:http://windingroadway.blogspot.co.uk/2013/10/one-thing-that-is-really-important-to.html