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

Sar*_*ara 11 android android-activity

我知道我可以覆盖这个onKeyDown方法,但是我想回去做两件事!

rip*_*per 22

FirstActivity

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

SecondActivity

int REQUEST_CODE = 123
Intent intent = new Intent(SecondActivity.this, ThirdActivity.class);
startActivityForResult(intent, REQUEST_CODE);
Run Code Online (Sandbox Code Playgroud)

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

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

SecondActivity(再次)

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


Mac*_*rse 3

我是这样想的:

A -> B -> C
Run Code Online (Sandbox Code Playgroud)

A、B、C 活动。

你不能执行两次 back,因为第一次onKeyDown()将在 C 中执行,第二次应在 B 中执行。

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

  1. 使用android:noHistory标签

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

  2. 使用意图。就像是:

    Intent intent = new Intent(C.this, A.class);
    startActivity(intent);
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用finishActivityFromChild()。我从未尝试过,但看起来你可以用它来根据 C 的结束方式来决定对 B 做什么。