Android: вернуться к предыдущей активности - PullRequest
484 голосов
/ 28 октября 2010

Я хочу сделать что-то простое в приложении для Android. Как можно вернуться к предыдущему занятию?

Какой код мне нужен, чтобы вернуться к предыдущему занятию

Ответы [ 22 ]

460 голосов
/ 28 октября 2010

Действия Android хранятся в стеке действий.Возвращение к предыдущему действию может означать две вещи.

  1. Вы открыли новое действие из другого действия с помощью startActivityForResult .В этом случае вы можете просто вызвать функцию finishActivity () из своего кода, и она вернет вас к предыдущему действию.

  2. Следите за действиемстек.Всякий раз, когда вы начинаете новое действие с намерением, вы можете указать флаг намерения, например FLAG_ACTIVITY_REORDER_TO_FRONT или FLAG_ACTIVITY_PREVIOUS_IS_TOP.Вы можете использовать это для перемещения между действиями в вашем приложении.Я не использовал их много, хотя.Посмотрите на флаги здесь: http://developer.android.com/reference/android/content/Intent.html

Как упоминалось в комментариях, если действие открывается с помощью startActivity(), то можно закрыть его с помощью finish().Если вы хотите использовать кнопку «Вверх», вы можете поймать ее в методе onOptionsSelected(MenuItem item), сравнив идентификатор элемента с android.R.id.home в отличие от R.id.home, как указано в комментариях.

217 голосов
/ 28 октября 2010

Попробуйте Activity#finish().Это более или менее то, что кнопка «Назад» делает по умолчанию.

77 голосов
/ 21 сентября 2011

Просто напишите по щелчку finish () . Это приведет вас к предыдущему занятию.

66 голосов
/ 18 января 2012

Только это

super.onBackPressed();
30 голосов
/ 10 апреля 2012
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

Это вернет вас к предыдущему действию, сохранив его стек и очистив все действия после него из стека.

Например, если стек был A-> B-> C-> D и вы запускаете B с этим флагом, стек будет A-> B

19 голосов
/ 28 октября 2010

Вы хотите взять под контроль поведение кнопки «Назад»?Вы можете переопределить кнопку «Назад» (чтобы перейти к определенному занятию) одним из двух способов.

Для Android 1.6 и ниже:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
        // do something on back.
        return true;
    }

    return super.onKeyDown(keyCode, event);
}

Или если вы поддерживаете только Android 2.0 илибольше:

@Override
public void onBackPressed() {
    // do something on back.
    return;
}

Для более подробной информации: http://android -developers.blogspot.com / 2009/12 / back-and-other-hard-keys-three-Stories.html

18 голосов
/ 04 февраля 2015

Просто вызовите этот метод, чтобы завершить текущее действие или вернуться назад с помощью onBackPressed

finish();

ИЛИ

onBackPressed();
13 голосов
/ 01 июля 2015

если вы хотите перейти к предыдущему занятию, используйте

finish();

OR

onBackPressed();

, если вы хотите перейти ко второму занятию или ниже, используйте следующее:

intent = new Intent(MyFourthActivity.this , MySecondActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//Bundle is optional
Bundle bundle = new Bundle();
bundle.putString("MyValue1", val1);
intent.putExtras(bundle);
//end Bundle
startActivity(intent);
11 голосов
/ 27 ноября 2013

Если вы правильно настроили файл AndroidManifest.xml с родительским действием, вы можете использовать:

NavUtils.navigateUpFromSameTask(this);

Где это ваше дочернее действие.

10 голосов
/ 20 сентября 2017

Добавьте это в свой метод onCLick (), он вернется к вашему предыдущему действию

отделка ();

или Вы можете использовать это. У меня это отлично сработало

 @Override
  public boolean onOptionsItemSelected(MenuItem item) {
  int id = item.getItemId();

      if ( id == android.R.id.home ) {
         finish();
         return true;
       }

  return super.onOptionsItemSelected(item);
  }
...