Когда я нажимаю кнопку « Выход» в своем профиле, я хочу, чтобы пользователь перешел на страницу входа , где ему нужно использовать новые учетные данные.
Следовательно, я использовал этот код:
Intent intent = new Intent(ProfileActivity.this,
LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
в onButtonClick
кнопке выхода.
Но проблема в том, что когда я нажимаю кнопку возврата устройства в Activity Login, я попадаю в ProfileActivity. Я ожидал, что приложение закроется, когда я нажму кнопку возврата устройства в LoginActivity.
Что я делаю не так?
Я также добавил android:launchMode="singleTop"
в манифест для моего LoginActivity
Спасибо
android
back-stack
Archie.bpgc
источник
источник
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
я получил ответ на этот вопрос: stackoverflow.com/questions/3473168/…Ответы:
Предлагаемое здесь решение сработало для меня:
Ява
Котлин
Однако для этого требуется уровень API> = 11.
источник
FLAG_ACTIVITY_CLEAR_TASK
Это официальный способ получить. Не нужно менять все действия в приложении.Вот одно из решений, позволяющих очистить все действия вашего приложения при использовании кнопки выхода.
Каждый раз, когда вы запускаете Activity, запускайте его так:
Если вы хотите закрыть все приложение, сделайте следующее:
RESULT_CLOSE_ALL - это последняя глобальная переменная с уникальным целым числом, сигнализирующая о том, что вы хотите закрыть все действия.
Затем определите
onActivityResult(...)
обратный вызов каждого действия, чтобы, когда действие возвращается со значением RESULT_CLOSE_ALL, оно также вызываетfinish()
:Это вызовет каскадный эффект, который закроет все ваши действия.
Однако это взлом, и он используется
startActivityForResult
не предназначенным для этого способом.Возможно, лучший способ сделать это - использовать широковещательные приемники, как показано здесь:
При выходе из системы очистить стек истории активности, не позволяя кнопке «назад» открывать Активы только для входа в систему.
См. Также эти темы для других методов:
Android: очистить задний стек
Завершить все предыдущие действия
источник
Чтобы полностью очистить стек действий, вы хотите создать новый стек задач с помощью TaskStackBuilder, например:
Это не только создаст новый чистый стек задач, но и обеспечит правильное функционирование кнопки «вверх», если ваша LoginActivity имеет родительскую активность.
источник
FLAG_ACTIVITY_NEW_TASK
илиfinishAffinity()
не работал у меня. Только этот ответ решил цель.finishAffinity()
добавлено в API 16. ИспользуетсяActivityCompat.finishAffinity()
в предыдущих версиях. Когда вы запустите любое действие с использованием намерения и завершите текущее действие. Теперь используйтеActivityCompat.finishAffinity()
вместо этогоfinish()
. он завершит всю сложенную активность ниже текущей. Он отлично работает для меня.источник
ActivityCompat.finishAffinity()
finishAffinity()
также завершает текущее действие со всеми действиями, присутствующими в заднем стеке того же соответствия.Что сработало для меня
источник
Одно из возможных решений, которое я могу вам предложить, - это добавить
android:launchMode="singleTop"
в манифест для моей ProfileActivity . и при нажатии кнопки выхода вы можете выйти из системы, снова запустив LoginActivity. при выходе из системы вы можете вызвать это.источник
Для API 11+ вы можете использовать
Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK
это так:Он полностью очистит все предыдущие действия и начнет новую деятельность.
источник
Вы можете попробовать
finishAffinity()
, он закрывает все текущие действия и работает на Android 4.1 и выше.источник
Я тоже столкнулся с той же проблемой ..
в активности входа в систему, что я делаю.
при выходе
Это работает хорошо, но когда я нахожусь в ActivityLoggedIn, свертываю приложение и нажимаю значок кнопки запуска на панели приложений, MainActivity запускается снова: - / я использую флаг
для MainActivity.
источник
Используйте следующее для
activity
удалить CLEAR_TASK флаг для использования фрагмента.
Я надеюсь, что это может пригодиться некоторым людям.
источник
Просто держи
источник
Ни один из флагов намерений у меня не работал, но вот как я это исправил:
Когда пользователь выходит из одного действия, мне приходилось транслировать сообщение из этого действия, затем получать его в действиях, которые я хотел закрыть, после чего я вызываю finish (); и это работает очень хорошо.
источник
Попробуйте, это сработает:
источник
На уровне API 11 или выше используйте
FLAG_ACTIVITY_CLEAR_TASK
иFLAG_ACTIVITY_NEW_TASK
отметьте намерение, чтобы очистить весь стек активности.источник
Использовать это
источник
добавить в манифест для своей деятельности
android:launchMode="singleTask"
источник
Продвинутый, повторно используемый Котлин:
Вы можете установить флаг напрямую, используя метод setter. В Kotlin
or
есть замена Java на побитовый или|
.Если вы планируете использовать это регулярно, создайте функцию расширения Intent
Затем вы можете напрямую вызвать эту функцию перед запуском намерения
Если вам нужна возможность добавления дополнительных флагов в других ситуациях, добавьте необязательный параметр в функцию расширения.
источник