我可以强制Android Back按钮在Activity堆栈中向后退两步吗?

时间:2010-04-07 11:16:26

标签: android android-activity

我知道我可以覆盖onKeyDown方法,但我想要回来做两件事!

3 个答案:

答案 0 :(得分:22)

<强> FirstActivity

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivity(intent);

<强> SecondActivity

int REQUEST_CODE = 123
Intent intent = new Intent(SecondActivity.this, ThirdActivity.class);
startActivityForResult(intent, REQUEST_CODE);

(为了使这个教学法在下面有更多的代码用于此活动)

<强> ThirdActivity

@Override
public void onBackPressed() {
    // Semi ugly way of supporting that back button takes us back two activites instead of the usual one.
    setResultOkSoSecondActivityWontBeShown();
    finish();   
}

private void setResultOkSoSecondActivityWontBeShown() {
    Intent intent = new Intent();
    if (getParent() == null) {
    setResult(Activity.RESULT_OK, intent);
    } else {
        getParent().setResult(Activity.RESULT_OK, intent);
    }
}

SecondActivity(再次)

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 123) {
        if (resultCode == RESULT_OK) {
            finish();
        }
    }
}

答案 1 :(得分:3)

我这样想:

A -> B -> C

A,B,C活动。

由于第一个onKeyDown()将在C中执行而第二个应在B中执行,因此无法返回两次。

我不知道你为什么要这么做,但这里有一些选择。

  1. 使用android:noHistory tag

    也许你的C活动正在做一些不需要视图的事情,这就是你想要回来两次的原因。

  2. 使用意图。类似的东西:

    Intent intent = new Intent(C.this, A.class);
    startActivity(intent);
    
  3. 使用finishActivityFromChild()。我从来没有尝试过,但看起来你可以用它来决定在B上做什么,这取决于C的结束方式。

答案 2 :(得分:0)

| * | 返回一个屏幕或结束活动:

finish();

| * | 返回多个屏幕:

您可以使用意图返回到您需要的屏幕,并使用标记来防止返回到同一屏幕:

Intent gotoScreenVar = new Intent(goFromScreenCls.this, goToScreenCls.class);

gotoScreenVar.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);

startActivity(gotoScreenVar);