首页 > 解决方案 > 刷新以 startActivityForResult 开始的活动

问题描述

我有一个包含几个活动的应用程序,每个活动包含几个片段。后台有一个同步服务,导致活动刷新

Intent refreshIntent = getIntent();
refreshIntent.putExtra("message", Globals.MSG_DATA_UPDATE);
finish();
startActivity(refreshIntent);

因为这是在数据集发生变化时一次刷新所有底层片段的最简单方法。如果活动最终返回到调用者,我使用额外来确定必须设置哪个结果。

问题在于这种刷新以保留 requestCode 的方式破坏了 startActivityForResult() 和 onActivityResult(),但 resultCode 和 Intent 始终为空(我尝试了为“onActivityResult:Intent 始终为空”提出的所有变体在这里)

一种可能但非常不切实际的解决方案是刷新所有片段(我在这里使用片段寻呼机)而不是活动,但如果这是可以避免的,那将容易得多,特别是因为片段和寻呼机适应数据在 onCreate() 中,我将不得不取消所有内容并重新运行该代码。

我需要将意图返回给调用活动,因为当数据集发生更改时这些也需要刷新,唯一的方法是使用 Intent extra 或 resultCode。那么有没有可能在不破坏结果返回的情况下刷新活动?

标签: androidandroid-activity

解决方案


我自己得到了答案。

Recreate()

这做了很多事情,而不是完成() - 建议用于刷新的 startActivity 命令:

  • 它不会破坏 startActivityForResult() 的链接
  • 它的反应就像屏幕旋转后重绘一样,因此您可以将信息保存到savedInstanceState中,无论如何您都必须实现

推荐阅读