Когда я использую addFlags или setFlags для удаления действий в стеке? - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть активность на борту и активность входа.В LoginActivity после успешного входа в систему я пытаюсь очистить бортовую активность, используя следующий код:

startActivity(new Intent(context, HomeActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_CLEAR_TASK));

Я даже пытался Intent.FLAG_ACTIVITY_NO_HISTORY, но он также не работает.Так что мне делать?

Ответы [ 5 ]

0 голосов
/ 02 апреля 2019

Я предполагаю, что приложение запускается с OnboardActivity и запускается LoginActivity, а затем вы хотите очистить их обоих и запустить HomeActivity?

Если это так, я бы сделал этотаким образом:

  • OnboardActivity запускает LoginActivity с использованием startActivityForResult().
  • LoginActivity возвращает результат, который указывает, был ли вход успешным или нет, и вызывает finish(),LoginActivity больше не входит в задачу.
  • OnboardActivity проверяет результат в OnActivityResult() и, если вход выполнен успешно, запускает HomeActivity (флаги не нужны) и вызывает finish() для себя.
  • На этом этапе и LoginActivity, и OnboardActivity пропали, и HomeActivity является единственным Activity в задании.
0 голосов
/ 02 апреля 2019

у вас есть два варианта для этого

Вы можете использовать

первое решение: -

    Intent intent = new Intent(context, HomeActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
    startActivity(intent);

Второе решение: -

Звоните finishAffinity(); перед началом второго занятия.

0 голосов
/ 02 апреля 2019

Я бы сказал, перейдите с finishAffinity(), прежде чем переходить к активности на борту. Там нет необходимости устанавливать какие-либо флаги. Потому что этот метод убивает все действия в стеке, а также текущую активность

0 голосов
/ 02 апреля 2019

Нет необходимости использовать флаги.Даже если вы хотите понять, отметьте this

Есть два способа завершить текущую активность (LoginActivity в вашем случае) и перейти к следующей активности (OnBoard в вашем случае).:

  1. Позвоните finish() перед началом второго занятия.Это уничтожит текущую активность.
  2. Позвоните finishAffinity(); перед запуском Second Activity.Это уничтожит стек всех предыдущих действий.

Надеюсь, это поможет вам.

0 голосов
/ 02 апреля 2019

Попробуйте код ниже:

    Intent intent = new Intent(context, HomeActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
    startActivity(intent);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...