【问题标题】:finish activity in onActivityResult does not workonActivityResult 中的完成活动不起作用
【发布时间】:2013-04-18 17:23:53
【问题描述】:

我有两项活动必须共同生存或共同死亡。基本上 AlphaActivity 做了一些工作,然后为 BetaActivity 发送一个意图 (startActivityForResult())。当 BetaActivity 完成后,我希望它为 GammaActivity 发送一个意图 (startActivity()),然后自行调用 finish()。完成后,我希望调用 AlphaActivity 的 onActivityResult() 方法,但这似乎永远不会发生。我的设计是在 AlphaActivity 的onActivityResult() 中调用finish()。我的计划是,一旦达到 GammaActivity,用户将永远无法返回 AlphaActivity 或 BetaActivity。但目前后退按钮确实会将用户带到 AlphaActivity。

我确实有一些想法为什么它不起作用,但在这里讨论它们是没有意义的,因为我对什么可能真正起作用感兴趣。

编辑:

代码都是很标准的东西:

从阿尔法内部

private void startBetaActivity() {
    Intent intent = new Intent(this, BetaActivity.class);
    startActivityForResult(intent, Constant.EXIT_CODE);

}

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

    if (resultCode == RESULT_OK) {
        if (requestCode == Constant.EXIT_CODE) {
            this.finish();
        }
    }
}

从 Beta 内部:

if (success) {
            startGammaActivity();
            finish();
        }

【问题讨论】:

  • 你描述的应该可以。你能在你开始 BetaActivity 的地方发布代码然后完成它吗?
  • 您需要对来自BetaActivity 的结果进行处理吗?为什么AlphaActivity 启动时不能finish() BetaActivity

标签: android android-intent android-activity back activity-finish


【解决方案1】:

在我看来,你应该遵循这个,

  1. AlphaActivity 使用 X 请求代码启动 BetaActivity 以获取结果
  2. BetaActivity 完成他的工作,然后调用 setResult(Y, Z) 并调用 finish()
  3. AlphaActivity 将使用 RequestCode X、ResultCode Y 和数据 Z 运行 onActivityResult。如果 X 和 Y 是您所期望的,则启动 GammaActivity 并最终在 AlphaActivity 上调用 finish()

您不应该在 BetaActivity 上启动 GammaActivity,因为 AlphaActivity onActivityResult 将无法正常工作。

【讨论】:

    【解决方案2】:

    你还没有调用 setResult()

    if (success) {
            startGammaActivity();
            setResult(RESULT_OK);
            finish();
        }
    

    或者,如果您永远不需要从 BetaActivity 回到 AlphaActivity,那么在两个活动清单中输入 android:noHistory=true

    【讨论】:

    • 感谢您的意见,尤其是关于android:noHistory=true 的信息。我接受了另一个,因为看起来他是第一个。 +1
    • 你做对了,我也投了他一票。顺便说一句,如果你曾经在 onBackpress 中设置过结果,那么你必须在调用 super() 之前设置结果
    • 谢谢。我不知道。
    【解决方案3】:

    我认为你只需要:

    if (success) {
            startGammaActivity();
            setResult(Activity.RESULT_OK); //add this
            finish();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多