finish activity in onActivityResult does not work

learner picture learner · Apr 25, 2013 · Viewed 17.6k times · Source

I have a pair of activities that must live or die together. Basically AlphaActivity does some work and then dispatches an intent (startActivityForResult()) for BetaActivity. When BetaActivity is done, I want it to dispatch an intent (startActivity()) for GammaActivity and then call finish() on itself. Upon finishing I was hoping for AlphaActivity's onActivityResult() method to be called, but that never seems to happen. My design is such that inside AlphaActivity's onActivityResult(), I call finish(). My plan is such that once GammaActivity is reached, a user cannot ever return to either AlphaActivity or BetaActivity. But presently the back button does take the user to the AlphaActivity.

I do have some ideas why it's not working, but discussing them here is pointless since I am interested in what might actually work.

EDIT:

The code is all quite standard stuff:

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

From inside Beta:

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

Answer

StoneBird picture StoneBird · Apr 25, 2013

I think you just need to:

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