У меня есть это приложение, в котором пользователь может открывать такие действия:
MainActivity -> ActivityB -> ActivityC -> ActivityD
Теперь я хочу, чтобы пользователь мог нормально вернуться из:
MainActivity <- ActivityB <- ActivityC
Хотя, если бы пошел на ActivityD, я хочу, чтобы он закрыл все до MainActivity:
MainActivity <- ActivityD
Правильный ли это подход к достижению того, что я хочу:
https://stackoverflow.com/a/14785924/10532911
Обновлено: изначально я думал, что / 14785924/10532911 применяется в качестве решения. Хотя мне и не нужны были результаты. Приведенное ниже решение подходит для моего случая.
Возможный дубликат Android: как заставить действие возвращать результаты действия, которое его вызывает?
user1511417, проверьте мою правку. Также проверьте решения ниже и их комментарии.




Вероятно, лучший способ сделать это - использовать такие флаги Intent:
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
Большое спасибо за решение, Вуко. К сожалению, я не могу выбрать два ответа. Итак, я выбрал тот, с более подробной информацией для будущих спрашивающих.
В 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, я выполнил бы приведенный выше код? или я должен переопределить и <-, и панель навигации обратно и поместить ее туда.
Используйте этот код, когда вы хотите, чтобы пользователь вернулся к MainActivity из ActivityD, если вы хотите направить его с помощью кнопки или чего-то подобного, просто поместите этот код в onClickListener() кнопки.
Привет, я не делаю это с помощью кнопки. Я делаю это, когда пользователь снова нажимает на <- или на навигацию.
@Horizon, можешь ли ты попробовать код из ответа и сказать мне, работает он так, как ожидалось, или нет?
Да, размещение приведенного выше кода внутри onSupportNavigateUp () и onBackPressed () работает для <- и для навигации. Думаю, лучшего места для этого нет. Я как бы надеялся, что смогу очистить стек при запуске ActivityD, а не внутри него. Большое спасибо за решение.
@Horizon Без проблем, рад помочь :)
Итак, вы в основном спрашиваете, работает ли ответ на связанный вопрос о stackoverflow или стоит ли его? Пожалуйста, попробуйте сами! Если это не работает, прокомментируйте только что связанный вопрос.