【问题标题】:Can I force the Android Back button to go two steps back in the Activity stack?我可以强制 Android Back 按钮在 Activity 堆栈中后退两步吗?
【发布时间】:2010-04-07 11:16:26
【问题描述】:

我知道我可以重写 onKeyDown 方法,但我希望 Back 做这件事,只需两次!

【问题讨论】:

标签: android android-activity


【解决方案1】:

FirstActivity

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

第二活动

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

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

第三活动

@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();
        }
    }
}

【讨论】:

    【解决方案2】:

    我是这样想的:

    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 的结束方式。

    【讨论】:

      【解决方案3】:

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

      finish();
      

      |*| 返回多个屏幕:

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

      Intent gotoScreenVar = new Intent(goFromScreenCls.this, goToScreenCls.class);
      
      gotoScreenVar.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
      
      startActivity(gotoScreenVar);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多