【问题标题】:Using onResume() to refresh activity使用 onResume() 刷新活动
【发布时间】:2011-10-14 14:34:51
【问题描述】:

我这辈子都不知道如何在按下后退按钮后刷新活动。我目前有一个活动 A,它触发了转到 B 的意图,而在动作 B 上,如果你按下回,我想回到动作 A,但让它自行刷新。我可以使用这个意图来刷新当前的活动:

Intent refresh = new Intent(this, Favorites.class);
    startActivity(refresh);
    this.finish();

但我不知道如何正确使用 onResume() 函数来刷新我的动作 A 后回到它。

【问题讨论】:

  • 当前刷新方案有效的可能原因是您在标准启动模式下运行活动。这意味着每次调用 startActivity(refresh) 都会生成一个新的活动 A 实例。由于每个新实例都经过 onCreate(),因此创建这些不必要的实例会让人感觉刷新活动。要正确执行此操作,您确实应该识别 onCreate() 中负责“刷新”活动的代码并将其移至 onResume(),如下面的 Ovidiu 建议的那样。

标签: android android-intent lifecycle back-button onresume


【解决方案1】:

如果您在从ActivityB 回来时需要ActivityA 的特殊行为,则应使用startActivityForResult(Intent intent, int requestCode) 而不是startActivity(Intent intent)

 startActivityForResult(new Intent(this, ActivityB.class), REQUEST_CODE); 

这样,您将能够通过重载onActivityResult(int requestCode, int resultCode, Intent intent) 来检测ActivityBActivityA 中的终止:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);

    if (requestCode == REQUEST_CODE) {
        doRefresh(); // your "refresh" code
    }
}

即使您通过按下后退按钮终止ActivityB,这仍然有效。在这种情况下,resultCode 将默认为 RESULT_CANCELLED

【讨论】:

    【解决方案2】:

    使用startActivityForResult(intent, requestCode);Activity A开始Activity B

    然后在Activity A 覆盖onActivityResult(int requestCode, int resultCode, Intent data)

    在那里你可以刷新你的Activity A

    【讨论】:

      【解决方案3】:

      您需要将更新 Activity 的 UI 的代码放在 onResume() 方法中。也许您应该发布更多代码或解释您到底要更新什么。

      【讨论】:

      • 我有一个包含从我的数据库中检索到的 5 个字符串的列表视图的活动。它使用 BackService 方法运行,即如果数据库发生更改,我将收到带有字符串的新通知。如果我单击该通知,则列表视图也应包含该字符串。 OnResume() 会允许我这样做吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多