Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以强制Android后退按钮在活动堆栈中后退两步吗?_Android_Android Activity - Fatal编程技术网

我可以强制Android后退按钮在活动堆栈中后退两步吗?

我可以强制Android后退按钮在活动堆栈中后退两步吗?,android,android-activity,Android,Android Activity,我知道我可以覆盖onKeyDown方法,但我想回去做这件事,就两次 我是这样想的: A -> B -> C A、 B、C活动 由于第一个onKeyDown()将在C中执行,第二个应该在B中执行,因此不能执行两次back 我不知道你为什么要这么做,但这里有一些选择 使用: 也许您的C活动正在做一些不需要视图的事情,这就是为什么您要返回两次 使用意图。比如: Intent intent = new Intent(C.this, A.class); startActivity(inten

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

我是这样想的:

A -> B -> C
A、 B、C活动

由于第一个
onKeyDown()
将在C中执行,第二个应该在B中执行,因此不能执行两次back

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

  • 使用:

    也许您的C活动正在做一些不需要视图的事情,这就是为什么您要返回两次

  • 使用意图。比如:

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


  • 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);
        }
    }
    
    第二活动

    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);
        }
    }
    
    (为了使这一教学法更具教育意义,下面有更多的活动代码)

    第三十届

    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);
        }
    }
    
    第二次活动(再次)

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


    |*|返回多个屏幕:

    Intent gotoScreenVar = new Intent(goFromScreenCls.this, goToScreenCls.class);
    
    gotoScreenVar.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
    
    startActivity(gotoScreenVar);
    
    您可以使用intent返回到需要的屏幕,并使用标志防止返回到同一屏幕:

    Intent gotoScreenVar = new Intent(goFromScreenCls.this, goToScreenCls.class);
    
    gotoScreenVar.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
    
    startActivity(gotoScreenVar);
    
    有一个关于使用后退键的问题。只需将其设置为返回到您想要的任何活动。