Android中,finish()关闭应用而不是活动。

6
我调用一个带返回值的活动:
private static final int CODE_LOGIN = 0;
private static final int CODE_DETAILS = 1;

private void callDetailsActivity() {
    Intent switchToDetailsActivity = new Intent(getApplicationContext(), Details.class);
    switchToDetailsActivity.putExtra(TAG_ID, details.get(TAG_ID));
    startActivityForResult(switchToDetailsActivity, CODE_DETAILS);
}

现在在我的Details.class中,我调用以下代码返回到之前的活动:
@Override
public void onBackPressed() {
    setResult(RESULT_OK);
    super.onBackPressed();
}

然后是我的onActivityResult()方法

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        if (requestCode == CODE_LOGIN) {
                // This is for my other Activity, where the "return" works
        }
    }
    updateOffers();
}

但是,我并没有回到之前的课堂,应用程序关闭了,并没有任何错误日志。当我按下主页按钮返回之前的应用程序时,我可以进入我的应用程序,然后我就在之前的活动中了,但这明显不是它应该工作的方式。

我还尝试了不改变 onBackPressed(),或者只是在 onBackPressed() 中写入 finish(),但什么都没有用。

我没有设置 android:noHistory="true"

对于我的另一个 Activity(使用完全相同的代码),它完美地工作(CODE_LOGIN)。

有人能帮帮我吗?


你能否分享第一个活动中的“onActivityResult”代码? - Sahil Sakhuja
尝试在onBackPressed()底部添加super.onBackPressed,并从new Intent()中删除参数。 - Vijju
你在 startActivityForResult 后是否调用了 finish() - IAmGroot
不,就是上面的那个,我更新了代码 ;) - degude
常量 CODE_DETAILS 的值是多少? - David Wasser
可能会晚回答:可以检查Activity是否包含launchmode为Singleinstance。 - Sri Kanth
3个回答

4
也许您已经在AndroidManifest中将第一个活动声明为android:noHistory="true"?

2

我发现了我的错误。在我的代码深处,我意外地调用了finish(),因此在全局范围内我调用了两次finish(),导致应用程序关闭。

感谢您的帮助和建议,建议使用super.onBackPressed()


1
setResult(RESULT_OK, returnToOffers); 更改为 setResult(RESULT_OK); 并且删除 returnToOffers intent。我还建议将 finish() 替换为 super.onBackPressed() 以实现未来的兼容性。
例如,在 Android Lik-M-Aid(或任何下一个版本中),如果他们决定在用户使用后退按钮取消活动时进行一些特殊的红色发光效果,您不必更新应用程序来支持它。

我已经按照你说的修改了代码,但它仍然无法工作。 - degude
你能否将你的清单添加到问题中,并指出哪个活动没有正常工作?问题可能就在那里。 - Tenfour04

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接