6

我有一对必须生或死的活动。基本上 AlphaActivity 会做一些工作,然后startActivityForResult()为 BetaActivity 发送一个意图 ( )。当 BetaActivity 完成后,我希望它startActivity()为 GammaActivity 调度一个意图 (),然后调用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();
        }
4

3 回答 3

6

我认为你只需要:

if (success) {
        startGammaActivity();
        setResult(Activity.RESULT_OK); //add this
        finish();
}
于 2013-04-25T00:24:59.033 回答
5

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

  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 将无法正常工作。

于 2013-04-25T00:18:39.117 回答
4

你还没有调用 setResult()

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

或者,如果您永远不需要在两个活动清单BetaActivity中从那时返回AlphaActivityandroid:noHistory=true

于 2013-04-25T00:22:40.907 回答