Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android onActivityResult中的完成活动不起作用_Android_Android Intent_Android Activity_Back_Activity Finish - Fatal编程技术网

Android onActivityResult中的完成活动不起作用

Android onActivityResult中的完成活动不起作用,android,android-intent,android-activity,back,activity-finish,Android,Android Intent,Android Activity,Back,Activity Finish,我有两种活动必须一起生活或一起死去。基本上,AlphaActivity会做一些工作,然后为BetaActivity发送一个意图(startActivityForResult())。当BetaActivity完成时,我希望它为GammaActivity分派一个意图(startActivity()),然后对其自身调用finish())。完成后,我希望AlphaActivity的onActivityResult()方法能够被调用,但这似乎从未发生过。我的设计是这样的,在AlphaActivity的on

我有两种活动必须一起生活或一起死去。基本上,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();
        }
    }
}
从内部测试版:

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

在我看来,你应该遵循这一点

  • AlphaActivity为带有X请求代码的结果启动BetaActivity
  • BetaActivity完成他的工作,然后调用setResult(Y,Z)和callFinish()
  • AlphaActivity将使用请求代码X、结果代码Y和数据Z在ActivityResult上运行。如果X和Y是您期望的,则启动GammaActivity并最终调用AlphaActivity上的finish()

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

    您没有调用setResult()


    或者,如果您永远不需要从
    BetaActivity
    返回到
    AlphaActivity
    ,那么在这两个活动清单中放置
    android:noHistory=true
    我想您只需要:

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

    你所描述的应该有用。你能把代码贴在你开始BetaActivity然后完成它的地方吗?你需要用BetaActivity的结果做些什么吗?为什么不能
    AlphaActivity
    当它启动
    BetaActivity
    时,它只是
    finish()。我接受了另一个,因为看起来他是第一个+你做得对,我也投票支持他。顺便说一下,如果您曾经在onBackpress中设置过结果,那么您必须在调用super()之前设置结果,谢谢。我不知道。
    
    if (success) {
            startGammaActivity();
            setResult(Activity.RESULT_OK); //add this
            finish();
    }