Закончите все побочные действия, но не завершите основное

У меня есть это приложение, в котором пользователь может открывать такие действия:

MainActivity -> ActivityB -> ActivityC -> ActivityD

Теперь я хочу, чтобы пользователь мог нормально вернуться из:

MainActivity <- ActivityB <- ActivityC

Хотя, если бы пошел на ActivityD, я хочу, чтобы он закрыл все до MainActivity:

MainActivity <- ActivityD

Правильный ли это подход к достижению того, что я хочу:

https://stackoverflow.com/a/14785924/10532911

Обновлено: изначально я думал, что / 14785924/10532911 применяется в качестве решения. Хотя мне и не нужны были результаты. Приведенное ниже решение подходит для моего случая.

Итак, вы в основном спрашиваете, работает ли ответ на связанный вопрос о stackoverflow или стоит ли его? Пожалуйста, попробуйте сами! Если это не работает, прокомментируйте только что связанный вопрос.

user1511417 27.10.2018 13:24

user1511417, проверьте мою правку. Также проверьте решения ниже и их комментарии.

user10532911 27.10.2018 13:41
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
3
57
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вероятно, лучший способ сделать это - использовать такие флаги Intent:

Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);

Большое спасибо за решение, Вуко. К сожалению, я не могу выбрать два ответа. Итак, я выбрал тот, с более подробной информацией для будущих спрашивающих.

user10532911 27.10.2018 13:15
Ответ принят как подходящий

В ActivityD, чтобы вернуться к MainActivity, используйте такой код:

Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);

Использование флага CLEAR_TOP завершит все действия в стеке, которые находятся поверх MainActivity.

В приведенном вами примере это завершит ActivityD, ActivityC и ActivityB. Использование флага SINGLE_TOP гарантирует, что это вернет управление существующему экземпляру MainActivity (то есть: он не создаст новый экземпляр MainActivity).

Редактировать:

@Override
public void onBackPressed() {

   // place the code above here, to use back button to switch to new activity
}

Спасибо за ответ, PradyumanDixit. Хотя, где лучше всего разместить приведенный выше код. Когда пользователь снова нажимает на ActivityD или на панель навигации, я хочу, чтобы он перешел на MainActivity. Должен ли я поместить приведенный выше код в onDestroy () или просто запустить ActivityD с результатом, и когда я вернусь в ActivityC, я выполнил бы приведенный выше код? или я должен переопределить и <-, и панель навигации обратно и поместить ее туда.

user10532911 27.10.2018 12:50

Используйте этот код, когда вы хотите, чтобы пользователь вернулся к MainActivity из ActivityD, если вы хотите направить его с помощью кнопки или чего-то подобного, просто поместите этот код в onClickListener() кнопки.

PradyumanDixit 27.10.2018 12:54

Привет, я не делаю это с помощью кнопки. Я делаю это, когда пользователь снова нажимает на <- или на навигацию.

user10532911 27.10.2018 13:03

@Horizon, можешь ли ты попробовать код из ответа и сказать мне, работает он так, как ожидалось, или нет?

PradyumanDixit 27.10.2018 13:07

Да, размещение приведенного выше кода внутри onSupportNavigateUp () и onBackPressed () работает для <- и для навигации. Думаю, лучшего места для этого нет. Я как бы надеялся, что смогу очистить стек при запуске ActivityD, а не внутри него. Большое спасибо за решение.

user10532911 27.10.2018 13:14

@Horizon Без проблем, рад помочь :)

PradyumanDixit 27.10.2018 13:15

Другие вопросы по теме