确定活动是否因为后退导航而返回前台。

14

我想知道,如果用户在其他Activity上按下返回按钮,是否显示了我的Activity。 在生命周期中,我找不到任何可以可靠地提供这个信息的回调函数。

onRestart() 不起作用。如果应用程序任务被带到前台,它也会触发。 onResume()由于同样的原因也不起作用。

我想这应该有一个简单的解决方案,但在Android中,看似简单的事情可能会变得相当棘手。


1
请查看此答案:https://dev59.com/_Wkv5IYBdhLWcg3wpCXJ#10493384 - Bobs
1
这有点晚了,但为什么 onRestart 不起作用?它对我来说是有效的。 - osrl
1个回答

18

使用startActivityForResult(Intent, int)方法调用第二个Activity,然后在第二个Activity中重写onBackPressed()方法并将其setResult()RESULT_CANCELED。 最后,在第一个Activity中通过onActivityResult()捕获。

代码示例:

第一个Activity:

Intent i = new Intent(Activity1.this, Activity2.class);
startActivityForResult(i, 0);

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == 0) {
        if (resultCode == RESULT_CANCELED) {
                // user pressed back from 2nd activity to go to 1st activity. code here
        }
    }
}

活动 2:

@Override
public void onBackPressed() {
    setResult(RESULT_CANCELED);
    finish();
}

2
虽然你的回答很好,但我有大约15个活动,并且我正在使用AndoridAnnotations,它没有调用startActivityForResult的选项(尽管在即将发布的版本中可能会有)...所以我仍然希望有其他的想法... - Jakob
1
AndroidAnnotations会阻止你使用诸如这样的普通基础Android构造吗?那我就不会使用这样的工具了... - Ridcully
1
不,我可以使用标准的Android构造,但是现在我已经有15个活动需要操作了。答案可能只是“如何做到这一点”。 - Jakob
如果用户按返回键,则传递给onActivityResult()的结果代码不会是RESULT_OK(除非你做了一些其他的修改)。您无需触碰任何15个可调用活动 - 只需测试(resultCode != RESULT_OK)。 - tbm

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