#android #android-activity
Вопрос:
Рассмотрим гипотетическое приложение для электронного банкинга, в котором следующий поток:
Главная активность -> Конвертерактивность валюты ->> Возможность выбора ->>> Входная транзакционная активность ->>>> TransferReviewActivity ->>>>> TransferConfirmationActivity
Все действия (кроме домашней активности) вызываются как обычно startActivity()
, так и без finish()
. Это сделано намеренно, чтобы пользователь мог просмотреть входные данные на предыдущем экране. Но как только вы достигнете TransferConfirmationActivity и нажмете назад, я хочу вернуться к HomeActivity (и другие действия будут убиты).
Как это сделать?
Комментарии:
1. Начните все действия с помощью функции startActivityForResult(). В TransferConfirmationActivity добавьте putExtra к намерению, которое вы используете для завершения (), что указывает на то, что действие получения также должно быть закрыто.
Ответ №1:
Я думаю, что вы можете использовать Intent.FLAG_ACTIVITY_CLEAR_TOP
флаг для достижения этой цели.
Согласно документации Android о FLAG_ACTIVITY_CLEAR_TOP
Если задано, и запускаемое действие уже выполняется в текущей задаче, то вместо запуска нового экземпляра этого действия все остальные действия поверх него будут закрыты, и это Намерение будет передано (теперь вверху) старому действию как новое намерение.
val intent = Intent(this, HomeActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
startActivity(intent)
Ответ №2:
запустите домашнюю активность и добавьте флаг в намерение
Intent intent = new Intent(activity, HomeActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Ответ №3:
Переопределите onBackPressed()
TransferConfirmationActivity
и вернитесь к HomeActivity
этому:
Intent intent = new Intent(this, TransferConfirmationActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
finish();
Это вернет пользователя к существующему экземпляру HomeActivity
, удалив при этом все остальные действия из стека.
Если вы предпочитаете создать новый экземпляр HomeActivity
и вернуться к нему, просто снимите флаг Intent.FLAG_ACTIVITY_SINGLE_TOP
.