onActivityResult中的完成活动不起作用

时间:2013-04-24 23:56:49

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

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

我确实有一些想法,为什么它不起作用,但在这里讨论它们毫无意义,因为我对可能实际工作的内容感兴趣。

编辑:

代码都非常标准:

从Alpha内部

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();
        }

3 个答案:

答案 0 :(得分:6)

我认为你只需要:

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

答案 1 :(得分:5)

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

  1. AlphaActivity使用X请求代码
  2. 启动BetaActivity以获得结果
  3. BetaActivity完成他的工作,然后调用setResult(Y,Z)并调用finish()
  4. AlphaActivity将使用RequestCode X,ResultCode Y和数据Z运行onActivityResult。如果X和Y是您期望的那个,那么启动GammaActivity并最终调用AlphaActivity上的finish()
  5. 您不应该在BetaActivity上启动GammaActivity,因为AlphaActivity onActivityResult将无法正常工作。

答案 2 :(得分:4)

您尚未调用setResult()

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

或者,如果您永远不需要从BetaActivity返回AlphaActivity,那么在两个活动中就显示了android:noHistory=true