Можно ли заставить кнопку «Назад» Android вернуться на два шага назад в стек «Активность»? - PullRequest
11 голосов
/ 07 апреля 2010

Я знаю, что могу переопределить метод onKeyDown, но я хочу, чтобы Back сделал это, просто дважды!

Ответы [ 3 ]

22 голосов
/ 21 ноября 2012

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();
        }
    }
}
3 голосов
/ 07 апреля 2010

Я думаю об этом так:

A -> B -> C

A, B, C деятельность.

Вы не можете сделать возврат дважды, так как первый onKeyDown() будет выполнен в C, а второй должен быть выполнен в B.

Я не знаю, почему вы пытаетесь это сделать, но вот несколько вариантов.

  1. Использование тега android:noHistory :

    Возможно, ваша деятельность в С делает что-то, что не нуждается в просмотре, и поэтому вы хотите вернуться назад дважды.

  2. Использование намерения. Что-то вроде:

    Intent intent = new Intent(C.this, A.class);
    startActivity(intent);
    
  3. Использование finishActivityFromChild(). Я никогда не пробовал, но похоже, что вы можете использовать его, чтобы решить, что делать с B, в зависимости от того, как закончился C.

0 голосов
/ 06 июня 2017

| * | Возвращение на один экран или завершение действия:

finish();

| * | Возвращаемся более чем на один экран:

Вы можете вернуться к тому экрану, который вам нужен, с помощью намерения и использовать флаги, чтобы не вернуться на тот же экран:

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

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

startActivity(gotoScreenVar);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...